Я прочитал документацию akka и не могу четко понять взаимодействие потоков при использовании akka. Документы могут опустить это как очевидное, но для меня это не так очевидно.
Все актеры akka, казалось, работали в одном потоке, которого они называют. Я вижу акторов как со-процедуры, у которых только что сбрасывался собственный стек каждый раз, когда вызывается прием.
Вы можете выполнить огромную цепочку актеров, переключающихся по прямой линии. Каждый прием выполняет небольшую неблокирующую операцию -и заставляет другой прием работать дальше. Нет цикла обработки событий, который может обрабатывать сообщения вне системы акторов.
Я хотел бы перехватить запрос из другого потока, выполнить операции управления и дождаться другого сообщения.
Есть несколько вариантов использования, которые определяют мои потребности.
Есть поток, который постоянно опрашивает данные из некоторых источников. Как только данные соответствуют шаблону, он вызывает обработчик, управляемый событием -, основанный на субъектах.Логический контроллер принимает решение и передает его исполнителям. Должно быть два постоянных потока. Один поток постоянно работает над опросом, а другой работает асинхронно, чтобы контролировать его работу. Вы не должны допускать акторов akka к первому потоку, так как они нарушили периоды опроса, а первый поток не должен блокировать акторов, поэтому им нужен другой поток.
Есть какая-то двухсторонняя -настольная игра. На одной стороне есть поток контроллера, который планирует расчет времени работы, взаимодействует с сервером платы и так далее. Другой поток — это тяжелый вычислительный поток, который перебирает различные варианты и не может быть написан на akka, поскольку имеет блокирующий характер
. Я знаю о существующих фьючерсах akka, но они представляют собой рабочую задачу, которая запускается после запуска и закрывается после выполнения своей цели. Фьючерсы хорошо сочетаются с акторами akka, но не могут выразить зацикленные рабочие потоки.
Система акторов Akka включает в себя различные виды циклов сетевых событий. Вы можете использовать его встроенный -в системе удаленного актора или известный протокол 0mq. Но использование сети для взаимодействия потоков кажется мне чрезмерным.
Как предполагается склеить нить не -akka с нитью akka? Должен ли я написать пару специальных процедур для безопасной передачи сообщений в потоке -?