Quelle est la difficulté Haskell multi-threading?
J'ai entendu dire qu'en Haskell, la création d'une application multi-thread est aussi facile que de prendre un standard Haskell application et de le compiler avec le -threaded
drapeau. Dans d'autres cas, cependant, ont décrit l'utilisation d'un par
de commande dans le code source.
Quel est l'état de Haskell multi-threading? Comment est-il facile à introduire dans les programmes? Est-il un bon multi-threading tutoriel qui va au-dessus de ces différentes commandes et de leurs usages?
- Je crois que la Programmation Parallèle et Concurrente en Haskell par Simon Marlow est généralement considérée comme la meilleure introduction à ce sujet.
Vous devez vous connecter pour publier un commentaire.
Matures. La mise en œuvre est d'environ 15 ans, avec la mémoire transactionnelle pour 5 ans. GHC est largement utilisé compilateur, avec un grand open source de soutien et de support commercial.
Cela dépend de l'algorithme. Parfois, il peut être une ligne de
par
pour gagner de parallélisme. Parfois, de nouveaux algorithmes doivent être développés. En général, il sera plus facile d'introduire coffre-fort parallélisme et de la simultanéité dans Haskell, que typiques des langues, et la performance est bonne.Il existe 3 principaux parallèle et simultanée modèles de programmation Haskell.
par
Ce sont les choses principales. Dans tous les cas, vous devez compiler avec -fileté à utiliser des processeurs multicœurs de l'exécution, mais combien il est facile à paralléliser un problème particulier dépend de l'algorithme utilisé et de la programmation parallèle le modèle que vous adopter à partir de cette liste.
Ici est une présentation des principaux modèles de programmation parallèle en Haskell, et la façon d'atteindre la vitesse.
Je pense que Chapitre 24 de Real World Haskell est un bon tutoriel.
Il y a aussi la simultanéité terme.
Sans aucun changement dans le code de votre haskell rts va essayer de les utiliser pour certains processus internes, mais de les utiliser dans votre application, vous devez donner un indice qui est fait par
par b (f a b)
qui forces Haskell pas être si paresseux sur caculation deb
même sif
aura pas besoin pour résultat.Une raison de ne pas le faire pour chaque fonction qui exige de ses tous ses arguments (comme
a+b
), c'est que la synchronisation (calculs de planification et d'attente pour les résultats) donne une surcharge, et vous ne voulez probablement pas à dépenser de l'extra-tiques pour(2*3)+(3*4)
juste parce que vous pouvez calculer des multiplications en parallèle. Et vous aurez probablement perdre un peu de cache-hits ou quelque chose comme cela, d'optimisation ou de ce qui est fait quand vous faites cela sur un seul processeur (c'est à dire que vous aurez besoin de passer résultat d'un processeur à l'autre de toute façon).De cours de code qui est utilise
par
est moche et quand vous vous couchez liste ou certains autres structures de données avec la lumière des sous-éléments, vous aurez probablement envie de calculer certains morceaux de cette lumière, éléments pour s'assurer que les frais généraux/calc sera vraiment petit. Pour résoudre ce que vous pouvez regarder en parallèle.Il est également Parallèle des Données Haskell (DPH).
Si votre programme est plus sur IO monade que vous avez certainement besoin de beaucoup de changements. Voir
forkIO
, Logiciel de la Mémoire Transactionnelle (STM) et beaucoup d'autres de La simultanéité de la catégorie