Актер модель, чтобы заменить модель потоков? - PullRequest
21 голосов
/ 26 марта 2010

Я прочитал главу в книге («Семь языков за семь недель» Брюса А. Тейта) о Матце (изобретателе Ruby), который сказал: «Я бы удалил нить и добавил актеров или некоторые другие более продвинутые функции параллелизма».

  • Почему и как модель актера может быть продвинутой моделью параллелизма, которая заменяет многопоточность?
  • Какие еще модели являются «расширенной моделью параллелизма»?

Ответы [ 5 ]

15 голосов
/ 02 апреля 2010

Это не так много, что модель актера заменит нити; на уровне процессора процессы будут иметь несколько потоков, которые запланированы и выполняются на ядрах процессора. Идея актеров состоит в том, чтобы заменить эту основную сложность моделью, которая, как утверждают ее сторонники, облегчает программистам написание надежного кода.

Идея действующих лиц заключается в том, чтобы иметь отдельные потоки управления (процессы на языке Erlang), которые взаимодействуют исключительно посредством передачи сообщений. Более традиционной моделью программирования будет разделение памяти и координация связи между потоками с использованием мьютексов. Это все еще происходит под поверхностью в актерской модели, но детали отвлекаются, и программисту предоставляются надежные примитивы на основе передачи сообщений.

Одним из важных моментов является то, что актеры не обязательно отображают 1-1 на потоки - в случае с Erlang они точно не делают - обычно на один поток ядра будет приходиться много процессов Erlang. Таким образом, должен существовать планировщик, который назначает акторы потокам, и эта деталь также удалена от программиста приложения.

Если вас интересует модель актера, вы можете посмотреть, как она работает в Erlang или Scala .

Если вас интересуют другие типы новых возможностей параллелизма, вы можете обратиться к программной транзакционной памяти , другому подходу, который можно найти в clojure и haskell.

Следует упомянуть, что многие из более агрессивных попыток создания продвинутых моделей параллелизма, похоже, происходят на функциональных языках. Возможно, из-за убеждения (я сам выпиваю часть этой помощи), что неизменность делает параллелизм намного проще.

3 голосов
/ 28 марта 2010

Я сделал этот вопрос своим любимым и жду ответов, но пока его нет, вот мой ..

Почему и как модель актера может быть расширенная модель параллелизма, которая заменяет резьбу?

Актеры могут избавиться от изменяемого общего состояния, которое очень сложно правильно написать. (Мое понимание таково) actors может в основном мыслиться как объекты со своими собственными нитями. Вы отправляете сообщения между актерами, которые будут поставлены в очередь и использованы потоком в актере. Таким образом, любое состояние в субъекте инкапсулируется и не будет общим. Так что это легко кодировать правильно.

см. Также http://www.slideshare.net/jboner/state-youre-doing-it-wrong-javaone-2009

Какие другие модели являются «передовыми модель параллелизма '?

см. http://www.slideshare.net/jboner/state-youre-doing-it-wrong-javaone-2009

2 голосов
/ 07 апреля 2010

См. Программирование потока данных . Это подход, который является слоем поверх обычного дизайна ООП. В нескольких словах:

  • есть сцена, где Компоненты находятся;
  • Компоненты имеют Порты : Производители (вывод, который генерирует сообщения) и Потребители (ввод, который обрабатывает сообщения);
  • между компонентами предопределено сообщений : один порт производителя одного компонента связан с другим потребителем.

Программирование идет на 3 слоя:

  • написание системы потока данных (язык, фреймворк / сервер, компонент API),
  • написание компонентов (системных, базовых и предметно-ориентированных),
  • создание программы потока данных: размещение компонентов на сцене и определение сообщений между ними.

Статьи в Википедии - хорошая отправная точка для понимания бизнеса: http://en.wikipedia.org/wiki/Flow-based_programming См. Также «модель актора», «программирование потока данных» и т. Д.

1 голос
/ 09 декабря 2010

Пожалуйста, следующий документ

Модель вычисления актера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...