Это не проблема правильности, потому что библиотека актера будет порождать больше потоков по мере необходимости (верно?)
Насколько я понимаю, это не правильно. Актер блокируется, и отправка ему другого сообщения заставляет это сообщение оставаться в почтовом ящике актера, пока этот актер не сможет receive
его или react
к сообщению.
В Программировании в Scala (1) прямо указывается, что актеры не должны блокироваться. Если действующему субъекту необходимо выполнить что-то длительное, он должен передать работу второму действующему субъекту, чтобы основной действующий субъект мог освободиться и перейти к чтению дополнительных сообщений из своего почтового ящика. После того, как работник завершил работу, он может сообщить об этом факте главному действующему лицу, которое может закончить делать то, что должен.
Поскольку у рабочих тоже есть почтовые ящики, у вас останется несколько рабочих, занятых их работой. Если вам не хватает процессора, чтобы справиться с этим, их очереди будут становиться все больше и больше. В конце концов вы можете масштабироваться с помощью удаленных актеров. Akka может быть более полезным в таких случаях.
(1) Глава 32.5 Программирование в Scala (Одерское, Второе издание, 2010)
РЕДАКТИРОВАТЬ: Я нашел это:
Метод планировщика свойства Actor можно переопределить, чтобы он возвращал ResizableThreadPoolScheduler, который изменяет размер своего пула потоков, чтобы избежать голодания, вызванного акторами, которые вызывают произвольные методы блокировки.
Нашел по адресу: http://www.scala -lang.org / api / current / scala / актеры / Actor.html
Таким образом, это означает, что в зависимости от установленного вами планировщика, возможно, пул, используемый для запуска актеров, будет увеличен. Я был неправ, когда сказал, что вы ошибаетесь :-) Остальная часть ответа остается верной.