Блокировка ввода / вывода в Акке - PullRequest
18 голосов
/ 28 февраля 2012

В последнее время я делаю немного Akka и удивляюсь: могу ли я сделать блокировку ввода / вывода в Akka без больших проблем?Допустим, у нас есть Actor, который выполняет некоторый блокирующий ввод / вывод, потому что он использует устаревшую библиотеку, или по любой другой причине: не мог бы я просто использовать специальный диспетчер для тех акторов, у которых ThreadPool разумного размера и блокировать ввод / вывод безблокировать всех других актеров, потому что они работают с другим диспетчером?

Каковы недостатки этого?И каков оптимальный способ вызова стороннего HTTP-API от актера?

1 Ответ

17 голосов
/ 28 февраля 2012

В целом блокирование ввода-вывода - плохая идея, и в частности, в реактивной многопоточной среде, поэтому ваш первый шаг - попытаться избежать всего этого, что означает использование AsyncHttpClient или HttpAsyncClient.

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

Возможно, вы захотите взглянуть на модуль ввода-вывода Actor, чтобы получить более простой интерфейс для сетевого ввода-вывода..

Надеюсь, что все это поможет,

Приветствия, √

...