Nota : esta é uma publicação, pois a questão foi considerada inadequada para o fórum Stack Overflow e deveria ter sido postada aqui. O tópico original está lá .
Eu gostaria de falar sobre multithreading, paralelismo e as bibliotecas disponíveis hoje para realizar esse trabalho. Estou me perguntando especialmente se já existe uma biblioteca fácil de usar para atingir esse conceito (dado abaixo), ou se precisaria ser escrita e quão difícil seria.
Os propósitos da biblioteca que estou procurando:
- acessível para a maioria dos desenvolvedores, não apenas para engenheiros ou pessoas altamente graduadas (isso deve significar que os desenvolvedores QUEREM usá-lo, sem medo)
- disponível para desenvolvedores de C ++
- portátil (comece com Windows, Mac OS X e Linux e depois estenda para dispositivos móveis)
- leve
- fácil de usar (relacionado à acessibilidade)
Os recursos mais importantes que estou procurando:
- paralelismo de tarefas
- cancelamento de tarefas (de maneira branda e abrupta)
- dependências de tarefas
As bibliotecas relacionadas existentes :
- Blocos de construção de threads : muito complicado de usar e licença bastante restritiva (GPL / comercial), é a única biblioteca que encontrei e inclui todos os recursos que estou procurando
- Despacho Grand Central : atualmente não é portátil, não é muito complicado, sem cancelamento de tarefas (uma vez iniciado), sem dependências de tarefas, sem suporte automático a dependências (apenas manual)
- PFunc : Somente Unix, ainda um pouco complicado, sem dependência de tarefas, sem cancelamento de tarefas
- Biblioteca Paralela de Tarefas da Microsoft : plataforma MS e .NET apenas, sem cancelamento total, dependências restritas e manuais de tarefas (uma tarefa não pode ativar mais de uma outra tarefa)
- OpenCL : atualmente não está disponível em todas as plataformas, não muito mais do que uma biblioteca de tarefas paralelas da GPU (não tão alto quanto eu gostaria)
- OpenMP : amplamente suportado, exceto versões gratuitas do Visual Studio, sem cancelamento de tarefas nem dependências automáticas de tarefas
Então, quais são seus pensamentos sobre tudo isso? Por que você acha que existem tão poucas bibliotecas correspondentes a essas necessidades? Ou eu perdi uma ótima biblioteca? E você acha que isso significaria muito trabalho para conseguir um? Ou não é interessante o suficiente? Observe que as carências que escrevi são as que descobri com algumas pesquisas. Não sou especialista em nenhuma dessas bibliotecas.
O objetivo final desta biblioteca, mesmo que seja um sonho, seria programar de maneira paralela tão facilmente quanto você costuma fazer com programação sequencial.
Ceylo
Respostas:
O TBB é praticamente tudo o que se aproxima.
boost::thread
é um nível muito baixo. Você está procurando o lugar errado na TPL, a propósito - a Microsoft envia uma biblioteca separada chamada PPL para código nativo. Obviamente, ele suporta apenas o Windows.No entanto, se você achar que o TBB é complicado de usar, eu questionaria se os desenvolvedores em que você está pensando são realmente capazes de criar aplicativos paralelos. O TBB tem uma das interfaces mais amigáveis, com coisas simples como
parallel_for_each
. Se você não consegue lidar com algumas lambdas, acho difícil ver como você lida com a simultaneidade.fonte