2009-05-06 30 views
16

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.¿Cuáles son las ventajas de Blocking Queue en Java?

Pero más tarde 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 utilizar una cola de bloqueo para la aplicación anterior? (Ej: Rendimiento, modificable del código, cualquier truco especial, etc.)

Respuesta

26

La principal ventaja es que un 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.

6

Lo principal que elimina con la cola de bloqueo es 'sondeo'. Aquí es donde dices

En ese caso, el segundo hilo debe verificar periódicamente la fila de la cola.

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

12

Una cola de bloqueo es una cola que bloquea cuando intenta dequeue de ella y la cola está vacía, o si intenta encola elementos 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.

Cuestiones relacionadas