2012-02-28 21 views
18

Estoy haciendo algo de Akka últimamente y me pregunto: ¿Puedo hacer bloqueos de E/S en Akka sin meterme en un gran problema? Digamos que tenemos un Actor que hace algunas E/S de bloqueo porque usa una biblioteca heredada o por cualquier otra razón: ¿No podría simplemente usar un despachador especial para aquellos Actores que tengan un ThreadPool de un tamaño razonable y que bloqueen las E/S sin bloqueando a todos los demás actores porque se ejecutan con un despachador diferente?Bloqueo de IO en Akka

¿Cuáles son los inconvenientes de esto? ¿Y cuál sería la forma óptima de llamar a un API-API de un actor?

Respuesta

17

Hacer bloqueo IO es una mala idea en general, y en un entorno reactivo multiproceso en particular, por lo que su primer paso es tratar de evitarlo en conjunto, eso significa buscar en AsyncHttpClient o HttpAsyncClient.

Si eso no funciona, al menos puede mitigar los riesgos dando a los actores bloqueadores sus propios hilos. Esto, por supuesto, será costoso y aún corre el riesgo de llenar sus buzones de correo, pero esa es la opción de usar IO de bloqueo.

También es posible que desee ver el módulo IO Actor para obtener una interfaz más cruda a la red IO.

esperanza alguna de que esta ayuda,

Cheers, √

+0

¿Qué pasa con el uso de un futuro desde el interior del actor? – sourcedelica

+0

Todavía vas a bloquear hilos, de los cuales no tienes infinito. Los actores o los futuros no son el problema. –

+0

Odio preguntar, ¿hay un ejemplo para usar llamadas HTTP como cliente de un actor, solo podría encontrar uno que esté usando un futuro y esperándolo, lo que también bloquea el hilo. – Malax