Un modello che ho incontrato diverse volte è quello in cui è necessario controllare un elenco di valori mappando un test su di esso e vedendo se uno o tutti gli elementi sono passati. La soluzione tipica è solo quella di utilizzare i comodi built-in all
e any
.
Il problema è che questi valutano in seriale. In molti casi sarebbe molto più veloce valutare parallelamente al completamento del processo una volta che un thread trova un "False" per all
o un "True" per any
. Sono abbastanza sicuro che il comportamento dei cortocircuiti non può essere implementato usando Control.Parallel in quanto richiede una comunicazione tra processi e non capisco abbastanza vicino a Control.Concurrent per implementarlo ancora.
È un modello abbastanza comune in matematica (ad es. Miller-Rabin Primality), quindi mi sento come se qualcuno avesse probabilmente già trovato una soluzione per questo, ma per ovvi motivi facendo una ricerca su Google per "parallelo o / e / qualsiasi / tutto in elenco haskell "non restituisce molti risultati rilevanti.
unamb
biblioteca
pthreads
C o verdi in Haskell) Non devi avviare più server web per gestire le richieste web simultanee, invece esegui più thread in un unico processo! Lo stesso vale per il parallelismo. Raccogli quanti thread hai CPU e dividi il tuo lavoro in modo uniforme, occupandoti così delle attività legate alla CPU. Prova questa libreria per convincerti github.com/lehins/haskell-scheduler