Подтвердить что ты не робот

Шаблон актера - то, что он точно составляет

Я занимаюсь разработкой objective-C/iOS и слышал несколько ссылок на шаблон Actor. В книге Big Nerd Ranch говорится:

Объект-актер используется, когда у вас есть длительная работа, а некоторые код, который должен быть выполнен после его завершения. Этот вид объекта предоставляется информация, необходимая для выполнения задачи и обратных вызовов выполнить, когда эта задача будет выполнена. Актер работает в своей нитке без каких-либо дополнительных входных данных и уничтожается, когда он будет завершен.

Актер здесь используется вместе с сетевым вызовом. Так как актер в основном используется? Является ли она взаимоисключающей или бесплатной для делегации? Определение Актера кажется ОЧЕНЬ широким, и я пытаюсь лучше понять, что это значит. Кроме того, возможно ли иметь актера в среде, отличной от OO?

4b9b3361

Ответ 1

Это определение актера фактически кажется немного ограничительным. Он, конечно, не справляется с актерами в стиле Эрланг (или, я считаю, Scala). По моему опыту, актер - это то, что:

  • Отправляет и принимает сообщения (каждый участник имеет почтовый ящик)
  • Не передает измененную память другим участникам
  • Планируется на основе капризов времени выполнения. Актеру может быть предоставлена ​​собственная нить, но более вероятно, что несколько участников участвуют в кооперативной многопоточности в одном потоке или, возможно, даже участвуют в упреждающей многопоточности.

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

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

В Эрланге актер является функцией. Функция, вероятно, вызывает хвост (так что это в основном бесконечный цикл), и он, вероятно, имеет чистый способ самоограничения (бесконечный цикл имеет условие "break" ). Цикл обычно ожидает сообщения от системы, обрабатывает его и затем отправляет сообщения в остальную часть системы. В библиотеке Erlang OTP есть некоторые абстракции, которые устраняют необходимость даже писать цикл, поэтому актер OTP реализуется как набор обратных вызовов. Таким образом, актер OTP очень похож на объект.