Подтвердить что ты не робот

Блокировка ввода-вывода в Акке

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

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

4b9b3361

Ответ 1

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

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

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

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

Cheers, √