También hay término concurrencia.
sin ningún cambio en el código del teléfono RTS Haskell tratará de usar por algún proceso interno, pero para utilizar en su aplicación deben darle un indicio de que está hecho por par b (f a b)
que obliga a Haskell no ser tan perezoso en Caculation de b
incluso si f
no lo requerirá para el resultado.
Una de las razones para no hacer eso para cada función que requiera todos sus argumentos (como a+b
) es que la sincronización (cálculos de programación y espera de resultados) genera una sobrecarga y es probable que no desee gastar ticks para (2*3)+(3*4)
solo porque puede calcular multiplicaciones en paralelo. Y probablemente perderá algunos éxitos de caché o algo así o optimizaciones que se realiza cuando lo hace en un solo procesador (es decir, tendrá que pasar el resultado de un procesador a otro de todos modos).
Por supuesto, el código que se usa par
es feo y cuando pliega la lista u otras estructuras de datos con subelementos ligeros, probablemente querrá calcular algunos trozos de esos elementos ligeros para asegurarse de que la sobrecarga/calcificación será realmente pequeño. Para resolverlo, puede mirar parallel.
Hay también datos Haskell paralelo (DPH).
Si su programa es más sobre la mónada IO de lo que sin duda necesitan muchos cambios. Ver forkIO
, Software Transactional Memory (STM) y muchos otros de Concurrency category
Creo * La programación paralela y concurrente en Haskell * por Simon Marlow se considera generalmente como la mejor introducción a este tema. –