Quelle est la situation du multithreading en Haskell ?
Mature. L'implémentation a environ 15 ans, avec la mémoire transactionnelle depuis 5 ans. GHC est un compilateur largement utilisé, avec un large support open source et un soutien commercial.
Est-il facile de l'introduire dans les programmes ?
Cela dépend de l'algorithme. Parfois, il peut s'agir d'une utilisation en une ligne de par
pour gagner en parallélisme. Parfois, de nouveaux algorithmes doivent être développés. En général, il est plus facile d'introduire un parallélisme et une concurrence sûrs en Haskell, que dans les langages habituels, et les performances sont bonnes.
Existe-t-il un bon tutoriel sur le multithreading qui passe en revue ces différentes commandes et leurs utilisations ?
Il existe 3 grands modèles de programmation parallèle et concurrente en Haskell.
- parallélisme implicite via
par
- concurrence et parallélisme explicites via forkIO / MVars et mémoire transactionnelle logicielle
- parallélisme des données via les bibliothèques DPH
Ce sont les éléments principaux. Dans tous les cas, vous compilez avec -threaded pour utiliser le runtime multicore, mais la facilité avec laquelle vous pouvez paralléliser un problème particulier dépend de l'algorithme que vous utilisez et du modèle de programmation parallèle que vous adoptez dans cette liste.
Voici une introduction aux principaux modèles de programmation parallèle en Haskell, et comment obtenir des gains de vitesse.
Je pense Chapitre 24 de Real World Haskell est un bon tutoriel.