Pergunta

Estou trabalhando em um projeto que usa uma fila que mantém informações sobre as mensagens que precisam ser enviadas para hosts remotos. Nesse caso, um tópico é responsável por colocar informações na fila e outro thread é responsável por obter informações da fila e enviá -las. O segundo thread precisa verificar a fila para obter as informações periodicamente.

Mais tarde, mas descobri que isso é reinvenção da roda :) Eu poderia usar uma fila de bloqueio para esse fim.

Quais são as outras vantagens de usar uma fila de bloqueio para o aplicativo acima? (Ex: desempenho, modificável do código, quaisquer truques especiais etc.

Foi útil?

Solução

A principal vantagem é que um BlockingQueue Fornece uma implementação correta e segura por threads. Os desenvolvedores implementaram esse recurso há anos, mas é complicado acertar. Agora, o tempo de execução tem uma implementação desenvolvida, revisada e mantida por especialistas em concorrência.

A natureza "bloqueadora" da fila tem algumas vantagens. Primeiro, ao adicionar elementos, se a capacidade da fila for limitada, o consumo de memória também será limitado. Além disso, se os consumidores da fila ficarem muito atrás dos produtores, os produtores serão naturalmente acelerados, pois precisam esperar para adicionar elementos. Ao pegar elementos da fila, a principal vantagem é a simplicidade; Esperar para sempre é trivial, e esperar corretamente um tempo limite especificado é apenas um pouco mais complicado.

Outras dicas

Eles principais que você eliminam com a fila de bloqueio é a 'pesquisa'. É aqui que você diz

Nesse caso, o segundo encadeamento precisa verificar a fila para obter as informações periodicamente.

Isso pode ser muito ineficiente - usando muito tempo desnecessário da CPU. Também pode introduzir latências desnecessárias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top