Как я понимаю, актеры - это в основном легкие потоки, реализованные поверх потоков, запускающие много актеров в небольшом пуле общих потоков.scala актеры против потоков и блокировки IO
Учитывая это, использование блокирующих операций в акторе блокирует основной поток. Это не проблема корректности, потому что в библиотеке актера будут появляться новые потоки по мере необходимости (правильно?), Но потом вы получаете множество и много потоков, что отрицает преимущество использования актеров в первую очередь.
Учитывая, что, как работают актеры, когда вам нужно выполнять такие операции ввода-вывода? Существуют ли операции, которые «actor-block», приостанавливающие действие актера, позволяя потоку перейти к другим операциям (так как блокирующие операции приостанавливают поток, позволяя процессору перейти к другим операциям), или все, что написано на CPS, с цепью актеры? Или актеры просто не подходят для такого рода длительной операции?
История вопроса: У меня есть опыт написания многопоточного материала классическим способом, и хорошо понимаю, как работают циклы CPS/event, но не имеют абсолютно никакого опыта работы с актерами и просто хотят понять на высоком уровне, как они вписываются в , прежде чем погрузиться в код.
Он должен включать в себя какое-то разграниченное продолжение, как в http://jim-mcbeath.blogspot.com/2010/09/scala-coroutines.html. Или, возможно, используя неблокирующий поток сообщений? (http://blog.typesafe.com/non-blocking-message-flow-with-akka-actors) – VonC
См. мой ответ здесь http://stackoverflow.com/questions/1512066/is-there-any-non -blocking-ю-с открытым исходным кодом, реализация-для-scalas-актеров –