ejemplo arrayblockingqueue java performance data-structures queue

arrayblockingqueue - ¿Cuáles son las ventajas de Blocking Queue en Java?



blockingqueue java 8 (4)

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

En ese caso, el segundo hilo necesita verificar periódicamente la cola de la información.

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

Estoy trabajando en un proyecto que utiliza una cola que mantiene la información sobre los mensajes que deben enviarse a los 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 hilo necesita verificar periódicamente la cola de la información.

Pero luego descubrí que esto es la 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.)



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

La naturaleza de "bloqueo" 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 retrasan demasiado con respecto a los productores, los productores son acelerados naturalmente, ya que tienen que esperar para agregar elementos. Al tomar elementos de la cola, la principal ventaja es la simplicidad; esperar por siempre es trivial, y esperar correctamente un tiempo de espera especificado es solo un poco más complicado.


Una cola de bloqueo es una cola que se bloquea cuando intentas quitar la cola de ella y la cola está vacía, o si tratas de ponerle elementos en cola y la cola ya está llena. Un hilo que intenta dequeue de una cola vacía se bloquea hasta que otro hilo inserte un elemento en la cola. Un subproceso que intenta poner en cola un elemento en una cola completa se bloquea hasta que otro subproceso haga espacio en la cola, ya sea mediante la eliminación de uno o más elementos o la eliminación completa de la cola.