2012-02-28 4 views
18

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

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

ответ

17

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

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

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

Надежда все это помогает,

Cheers, √

+0

Что об использовании будущего внутри актера? – sourcedelica

+0

Вы по-прежнему будете блокировать потоки, из которых у вас нет бесконечности. Актеры или фьючерсы не проблема. –

+0

Мне не нравится спрашивать, есть ли пример использования HTTP-вызовов в качестве клиента от актера, я могу найти только тот, который использует будущее и ждет его, - который также блокирует поток. – Malax

Смежные вопросы