Pregunta

Estoy trabajando en un proyecto que utiliza una cola que mantiene información sobre los mensajes que deben enviarse a hosts remotos. En ese caso, un hilo es responsable de poner información en la cola y otro hilo es responsable de obtener información de la cola y enviarla. El segundo subproceso debe verificar la cola de la información periódicamente.

Pero luego descubrí que esto es una reinvención de la rueda :) Podría usar una cola de bloqueo para este propósito.

¿Cuáles son las otras ventajas de usar una cola de bloqueo para la aplicación anterior? (Ej: Rendimiento, Modificable del código, Cualquier truco especial, etc.)

¿Fue útil?

Solución

La principal ventaja es que un BlockingQueue proporciona una implementación correcta y segura para subprocesos. Los desarrolladores han implementado esta característica ellos mismos durante años, pero es difícil hacerlo bien. Ahora el tiempo de ejecución tiene una implementación desarrollada, revisada y mantenida por expertos en concurrencia.

El " bloqueo " La naturaleza de la cola tiene un par de ventajas. Primero, al agregar elementos, si la capacidad de la cola es limitada, el consumo de memoria también es limitado. Además, si los consumidores de la cola se alejan demasiado de los productores, los productores se estrangulan naturalmente ya que tienen que esperar para agregar elementos. Al tomar elementos de la cola, la principal ventaja es la simplicidad; esperar para siempre es trivial, y esperar correctamente un tiempo de espera específico es solo un poco más complicado.

Otros consejos

Lo clave que eliminas con la cola de bloqueo es 'sondeo'. Aquí es donde dices

  

En ese caso, el segundo subproceso debe verificar periódicamente la cola para obtener la información.

Esto puede ser muy ineficiente, utilizando mucho tiempo innecesario de CPU. También puede introducir latencias innecesarias.

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