Qual seria um exemplo do mundo real de uso de uma barreira em um aplicativo com vários segmentos?
-
11-09-2019 - |
Pergunta
pacote de simultaneidade do JDK, biblioteca de threads do Boost, biblioteca de threads do Perl (e não em Python embora) todos implementar barreira, eu não se deparar com a necessidade de usar uma barreira, por isso, se perguntando o que seria um caso de uso típico estar em multi-threaded aplicações.
Solução
As barreiras podem ser usados ??em todo o lugar através de exemplos inventados, mas muitas vezes você vai parecer-los em uma dispersão / reduzir método onde os resultados dos diferentes segmentos são todos necessários antes de prosseguir.
Se você quisesse paralelizar uma espécie, por exemplo, você poderia dividir a lista de n vezes e começar n tópicos para classificar a sua seção e pausa, quando eles estão todos terminados eles morreriam deixar o know pai que finalmente é bom para combinar o pedaços ordenados. (Eu sei que existem maneiras melhores mas é uma implementação).
O outro lugar que eu vi é no trabalho em rede paralelizado onde Have para enviar uma certa quantidade de dados por carga útil. Portanto, a interface será iniciado n baldes e esperar que todos eles para preencher antes de enviar a transmissão. Quando você pensa sobre uma linha T1 particionado sorta faz sentido, enviando uma explosão de dados ao longo dos 64 partições multiplexados seria melhor do que o envio de dados 1 da partição (que essencialmente custa o mesmo desde que o pacote tem de ser preenchido com 0 do.)
Hope essas são algumas coisas para você pensar sobre isso o problema!
Outras dicas
Uma barreira torna mais fácil para sincronizar vários segmentos sem ter que criar uma solução em torno de múltiplos conditions
& mutexes
.
Eu não posso dizer que tenho visto barriers
muitas vezes embora. Em algum ponto, como o número de threads cresce, pode valer a pena considerar um sistema mais "dissociado", como para gerenciar possíveis dead-locks.
MSDN: Um Barrieris um objecto que impede tarefas individuais em paralelo a partir de uma operação contínua até que todas as tarefas de atingir a barreira. É útil quando uma operação em paralelo ocorre em fases e cada fase requer sincronização entre as tarefas.