Ответ 1
Я был в замешательстве с этой темой в течение длительного времени. Я предположил, что существует определенная связь между нитями и актерами. Для каждого актера есть поток, который размещает его, поэтому я думал. Вероятно, для каждого потока работает несколько участников, которые работают в режиме совместной многозадачности.
Документация ориентирована на использование и внутреннюю защиту внутренней архитектуры. Вам просто нужно расширить класс Actor
, и вы получите действующего актера. Поэтому я попытался угадать, как это можно сделать. И предположил, что каждый Actor
имеет жизненный цикл. Что-то вроде асинхронного ожидания для очереди сообщений. Затем обработайте сообщение. Нажмите, чтобы начать.
Это было абсолютно ложное предположение. Хотя в документации говорится "жизненный цикл актера", это не означает жизненный цикл Actor
. Актер, упомянутый, представляет собой концепцию, а не фактический объект, реализующий класс Actor
. Объект остается пассивным в куче java.
Чтобы вдохнуть жизнь в концепцию, необходима скоординированная работа с участием кучки реальных работников. И сердце его - диспетчер. Он содержит всех участников, потоков и сообщений. И когда ресурсы становятся доступными, и есть сообщение, доступное для обработки, диспетчер активируется. Он принимает подходящий объект Actor
, обертывает его метод получения в runnable и передает его в запасную нить. Таким образом, для объекта не существует жизненного цикла только случайные вызовы методов из системы актеров.
Когда вы думаете об этом, это имеет гораздо больше смысла, чем схема, которую я предполагал раньше. Но мне было трудно вывести его из имеющейся документации. Это было написано опытными программистами concurrency. Отличается тем, что удерживает класс актера от концепции актера за ним. Они знают, что диспетчер для актерской системы подобен планировщику задач для ОС. Таким образом, они быстро доходят до сути и описывают различные вкусы, и реализация предполагаемой концепции должна быть знакома всем.
Но это не так легко для новичков. Он не знаком с образцом диспетчера в контексте актерских систем. Я попробовал Google "шаблон диспетчера", и он показал, что он не имеет отношения к определениям системы актеров.
Я легко нашел двойную отправку, многоотчетную и другие темы ООП. Я нашел нечто похожее на akka routers диспетчер сообщений. Существует, вероятно, достойное описание для диспетчеров сообщений актера, но найти его не так просто.
Надеюсь, я очистил недоразумение.