Un patrón que he encontrado varias veces ahora es uno en el que se debe verificar una lista de valores mapeando alguna prueba sobre él y ver si alguno o todos los elementos pasaron. La solución típica es usar los convenientes elementos integrados all
y any
.
El problema es que estos se evalúan en serie. En muchos casos, sería mucho más rápido evaluar en paralelo con el proceso completo una vez que cualquier hilo encuentre un "Falso" para all
o un "Verdadero" para any
. Estoy bastante seguro de que el comportamiento de cortocircuito no se puede implementar usando Control. Paralelo, ya que requiere comunicación entre procesos y no entiendo lo suficiente de Control.Concurrent para implementar esto todavía.
Es un patrón bastante común en matemáticas (por ejemplo, Miller-Rabin Primality), por lo que siento que alguien probablemente ya ha encontrado una solución para esto, pero por razones obvias haciendo una búsqueda en Google de "paralelo o / y / cualquiera / todo en la lista haskell "no devuelve muchos resultados relevantes.
unamb
biblioteca
pthreads
en C o subprocesos verdes en Haskell) ¡Usted no inicia múltiples servidores web para manejar solicitudes web concurrentes, en su lugar ejecuta múltiples subprocesos en un solo proceso! Lo mismo se aplica al paralelismo. Gira tantos subprocesos como CPU y divide su trabajo de manera uniforme, por lo que se encarga de las tareas vinculadas a la CPU. Pruebe esta biblioteca para convencerse a sí mismo github.com/lehins/haskell-scheduler