Максимальный размер очередей актеров? - PullRequest
3 голосов
/ 01 сентября 2009

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

Может ли очередь входящих сообщений актера обрабатывать сотни тысяч сообщений? Какая разница в производительности между кодом, непосредственно вызывающим метод объекта и помещающим актера с очередью посередине?

Приветствия

Джо

1 Ответ

4 голосов
/ 01 сентября 2009

Почтовый ящик субъекта - это очередь, реализованная в виде изменяемого двусвязного списка. Размер ограничен только доступной памятью. Если вы отправляете слишком много сообщений быстрее, чем субъект может их обработать, вы получите ошибку OutOfMemoryError.

Отправка сообщения актеру вызывает метод. Сложности связаны с постановкой сообщения в очередь, уведомлением субъекта, назначением субъекта потоком и т. Д. Таким образом, с отправкой этого сообщения происходит много вещей, и, следовательно, изрядное количество накладных расходов по сравнению с простым старым синхронным вызовом метода. Конечно, если метод находится там и блокирует какое-то время, он будет медленнее, по крайней мере, на время стены.

...