C'è anche un termine di concorrenza.
Senza alcuna modifica nel codice tuoi RTS Haskell cercheranno di usarli per qualche processo interno, ma da utilizzare nella propria applicazione si dovrebbe dare un suggerimento che è fatto da par b (f a b)
che costringe Haskell non essere così pigro su caculation di b
anche se f
non lo richiederà per il risultato.
Una delle ragioni per non farlo per ogni funzione che richiede tutti i suoi argomenti (come a+b
) è che la sincronizzazione (calcoli di pianificazione e attesa dei risultati) fornisce un sovraccarico e probabilmente non si vuole spendere extra- tick per (2*3)+(3*4)
solo perché è possibile calcolare le moltiplicazioni in parallelo. E probabilmente perderai alcuni colpi di cache o qualcosa del genere o ottimizzazioni che vengono fatte quando lo fai su un singolo processore (cioè dovrai passare comunque il risultato da un processore a un altro).
Ovviamente il codice che utilizza par
è brutto e quando si piega l'elenco o alcune altre strutture di dati con sotto-elementi di luce probabilmente si vorrà calcolare alcuni pezzi di quegli elementi chiari per assicurarsi che l'overhead/calc sia davvero piccolo Per risolvere il problema, è possibile consultare parallel.
Esiste anche Data Parallel Haskell (DPH).
Se il tuo programma è più incentrato su IO monade di quello che hai sicuramente bisogno di molte modifiche. Vedere forkIO
, Software Transactional Memory (STM) e molti altri da Concurrency category
Credo che * Parallel e Concurrent Programming in Haskell * di Simon Marlow è generalmente considerato la migliore introduzione a questo argomento. –