Ein Muster, auf das ich jetzt schon mehrmals gestoßen bin, ist eines, bei dem eine Liste von Werten überprüft werden muss, indem ein Test darüber abgebildet wird und geprüft wird, ob einige oder alle Elemente bestanden wurden. Die typische Lösung besteht darin, nur die praktischen Einbauten all
und zu verwenden any
.
Das Problem ist, dass diese seriell ausgewertet werden. In vielen Fällen wäre es viel schneller, parallel zum Abschluss des Prozesses zu bewerten, sobald ein Thread ein "False" für all
oder ein "True" für findet any
. Ich bin mir ziemlich sicher, dass das Kurzschlussverhalten mit Control.Parallel nicht implementiert werden kann, da es eine prozessübergreifende Kommunikation erfordert und ich Control.Concurrent noch nicht annähernd genug verstehe, um dies zu implementieren.
Es ist ein ziemlich verbreitetes Muster in der Mathematik (z. B. Miller-Rabin-Primalität), daher habe ich das Gefühl, dass jemand wahrscheinlich bereits eine Lösung dafür gefunden hat, aber aus offensichtlichen Gründen eine Google-Suche nach "parallel oder / und / any / all on list" durchführt haskell "gibt nicht viele relevante Ergebnisse zurück.
unamb
Bibliothek möglich
pthreads
in C oder grüne Threads in Haskell). Sie starten nicht mehrere Webserver, um gleichzeitige Webanforderungen zu verarbeiten, sondern führen mehrere Threads in einem einzigen Prozess aus! Gleiches gilt für die Parallelität. Sie drehen so viele Threads hoch, wie Sie CPUs haben, und teilen Ihre Arbeit gleichmäßig auf, wodurch Sie sich um CPU-gebundene Aufgaben kümmern. Versuchen Sie, diese Bibliothek selbst zu überzeugen github.com/lehins/haskell-scheduler