Pregunta

Frustrantemente, el sitio web de Hawtdispatch lo describe como "API del marco de la agrupación de eventos de los hilos y el marco de notificación de eventos NIO".

Tomemos primero la parte de 'agrupación de hilo'. La mayoría de los ejecutores proporcionados por Java también son básicamente grupos de hilos. ¿En qué se diferencia Hawtdispatch?

Aparentemente, también es una "API del marco de notificación de eventos de NIO". Supongo que es una capa delgada en la parte superior del NIO que toma los datos entrantes y pasa a su noción de 'grupo de subprocesos', y la pasa a un consumidor cuando el planificador del grupo de subprocesos encuentra el tiempo. ¿Correcto? (Cualquier mejora sobre NIO es bienvenida). ¿Alguien ha realizado algún análisis de rendimiento de Netty vs HD?

¿Fue útil?

Solución

HawtDispatch está diseñado para ser un grupo de roscas de tamaño fijo de un solo sistema. Proporciona implementos 2 sabores de los ejecutores de Java:

  • Cola de despacho global: los objetos ejecutables enviados se ejecutan simultáneamente (obtiene el mismo efecto utilizando un Executors.newFixedThreadPool(n) ejecutor)
  • Cola de envío en serie: los objetos ejecutables se ejecutan en serie (obtiene el mismo efecto utilizando un Executors.newSingleThreadExecutor() ejecutor)

A diferencia del modelo de ejecutor de Java, todas las colas de envío global y en serie comparten un solo grupo de subprocesos de tamaño fijo. Puede usar miles de colas de envío en serie sin aumentar el recuento de hilos. Las colas de envío en serie se pueden usar como buzones de Erlang para impulsar aplicaciones de estilo reactivo de actores.

Dado que HawtDispatch está utilizando un grupo de subprocesos de tamaño fijo para procesar todas las ejecuciones globales y de cola en serie, todas las tareas ejecutables que ejecuta no deben bloquear. En cierto modo, esto es similar a la arquitectura NodeJS, excepto que usa múltiples hilos en lugar de solo uno.

En comparación con Netty, HawtDispatch no es un marco para procesar los datos de socket. No proporciona un marco sobre cómo codificar/decodificar, buffer y procesar los datos del socket. Todo lo que hace es ejecutar un usuario configurado Runnable cuando los datos se pueden leer o escribir en el socket sin bloqueo. Depende de su aplicación y luego leer/escribir los datos del socket.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top