Um padrão que me deparei várias vezes agora é aquele em que uma lista de valores precisa ser verificada mapeando algum teste sobre ele e verificando se algum ou todos os elementos foram aprovados. A solução típica é apenas usar os convenientes embutidos all
e any
.
O problema é que eles são avaliados em série. Em muitos casos, seria muito mais rápido avaliar em paralelo com o processo sendo concluído quando qualquer encadeamento encontrar um "False" para all
ou um "True" para any
. Tenho certeza de que o comportamento em curto-circuito não pode ser implementado usando Control.Parallel, pois requer comunicação entre processos e não entendo em lugar algum o Control.Concurrent para implementar isso ainda.
É um padrão bastante comum em matemática (por exemplo, Miller-Rabin Primality), então eu sinto que alguém provavelmente já encontrou uma solução para isso, mas por razões óbvias fazendo uma pesquisa no google por "paralelo ou / e / qualquer / tudo na lista" haskell "não retorna muitos resultados relevantes.
unamb
biblioteca
pthreads
em C ou em verde em Haskell). Você inicia vários servidores da web para lidar com solicitações simultâneas da web, em vez de executar vários threads em um único processo! O mesmo se aplica ao paralelismo. Você gira o número de threads que possui CPUs e divide seu trabalho uniformemente, cuidando das tarefas ligadas à CPU. Tente esta biblioteca para se convencer github.com/lehins/haskell-scheduler