Я прочитал главу в книге (Семь языков за Семь Недель Bruce A. Tate) о Matz (Изобретатель Ruby) говорящий, что 'Я удалю поток и добавлю агентов, или некоторые другие более усовершенствованные функции параллелизма.
Дело не в том, что модель актора заменит потоки; на уровне процессора процессы по-прежнему будут иметь несколько потоков, которые запланированы и выполняются на ядрах процессора.Идея акторов состоит в том, чтобы заменить эту базовую сложность моделью, которая, как утверждают ее сторонники, облегчает программистам написание надежного кода.
Идея акторов состоит в том, чтобы иметь отдельные потоки управления (процессы на языке Erlang), которые общаются исключительно посредством передачи сообщений. Более традиционной моделью программирования было бы совместное использование памяти и координация взаимодействия между потоками с помощью мьютексов. Это все еще происходит под поверхностью в модели акторов, но детали абстрагируются, и программисту предоставляются надежные примитивы, основанные на передаче сообщений.
Одним из важных моментов является то, что субъекты не обязательно отображают 1-1 в потоки - в случае Erlang они определенно этого не делают - обычно на каждый поток ядра приходится много процессов Erlang. Таким образом, должен быть планировщик, который назначает участников потокам, и эта деталь также абстрагируется от программиста приложения.
Если вас интересует модель акторов, вы можете взглянуть на то, как она работает в Erlang или Scala .
Если вас интересуют другие типы новых проблем параллелизма, вы можете изучить программную транзакционную память - другой подход, который можно найти в clojure и haskell.
Следует упомянуть, что многие из наиболее агрессивных попыток создания продвинутых моделей параллелизма, по-видимому, делаются на функциональных языках. Возможно, из-за убеждения (я сам пью эту kool-помощь), что неизменяемость значительно упрощает параллелизм.
Я сделал этот вопрос своим любимым и жду ответов, но, поскольку их еще нет, вот мой ..
Почему и как модель акторов может быть расширенной моделью параллелизма, которая { {1}} заменяет потоки?
Акторы могут избавиться от изменяемого общего состояния, которое очень сложно правильно кодировать. (Насколько я понимаю,) акторы
могут в основном мыслить как объекты со своими собственными потоками. Вы отправляете сообщения между акторами, которые будут помещены в очередь и использованы потоком внутри актора. Таким образом, любое состояние в акторе инкапсулировано и не будет использоваться совместно. Так что правильно писать код легко.
см. Также http://www.slideshare.net/jboner/state-youre-doing-it-wrong-javaone-2009
Какие еще модели являются «расширенной моделью параллелизма '?
см. http://www.slideshare.net/jboner/state-youre-doing-it-wrong-javaone-2009
См. Программирование потока данных . Это подход, который является слоем поверх обычного дизайна ООП. Вкратце:
Программирование осуществляется на трех уровнях:
Статьи в Википедии - хорошая отправная точка для понимания бизнеса: http://en.wikipedia.org/wiki/Flow-based_programming См. Также «модель акторов», «программирование потока данных. "и т. д.