59 votes

Haskell léger, fils de frais généraux et de les utiliser sur multicores

J'ai lu le "Real World Haskell" livre, le chapitre sur la simultanéité et le parallélisme. Ma question est comme suit:

  • Depuis Haskell threads sont vraiment juste des multiples "virtuel" threads à l'intérieur d'un "vrai" OS-fil, est-ce à dire que la création de beaucoup d'entre eux (genre 1000) n'aura pas un impact énorme sur les performances? I. e., peut-on dire que la charge de travail générée à partir de la création d'un Haskell avec du fil d' forkIO (ou presque) est négligeable? Veuillez apporter pactical des exemples si possible.

  • Ne pas le concept de légers fils nous empêcher de l'aide de l'benefints des architectures multicœurs? Ce que je comprends, il n'est pas possible pour deux Haskell threads pour exécuter simultanément sur les deux cœurs, parce qu'ils sont vraiment un seul thread à partir du système d'exploitation du point de vue. Ou ne le Haskell runtime faire quelques trucs astucieux pour s'assurer que plusieurs CPU peut être fait usage de?

86voto

Don Stewart Points 94361

GHC runtime fournit un environnement d'exécution de soutien milliards d'étincelles, des milliers de légers fils, qui peut être répartie sur plusieurs matériels cœurs. Compiler avec -threaded et l'utilisation de l' +RTS -N4 drapeaux pour définir le numéro de votre choix de cœurs.

sparks/threads/workers/cores

Plus précisément:

est-ce à dire que la création de beaucoup d'entre eux (genre 1000) n'aura pas un impact énorme sur les performances?

Ainsi, la création de 1 000 000 d'entre eux est certainement possible. 1000 n'est vraiment pas cher il ne s'affiche même pas. Vous pouvez voir dans le thread de la création de points de référence, comme "fil de l'anneau" qui GHC est très, très bon.

Ne pas le concept de légers fils nous empêcher de l'aide de l'benefints des architectures multicœurs?

Pas du tout. GHC a été en cours d'exécution sur multicores depuis 2004. L'état actuel de la multicœur d'exécution est suivie ici.

Comment fait-il? Le meilleur endroit pour lire sur cette architecture est dans l'étude, "l'Exécution pour le Multicœur Haskell":

Le GHC système d'exécution prend en charge des millions de légers fils par multiplexage sur une poignée de threads du système d'exploitation, environ un pour chaque PROCESSEUR physique. ...

Haskell threads sont exécutées par un ensemble de système d'exploitation fils, nous faisons appel à des threads de travail. Nous maintenir à peu près un thread par CPU physique, mais exactement quel thread de travail peuvent varier d'un moment à l'autre ...

Depuis le thread de travail peut changer, nous maintenir exactement un Haskell Contexte d'Exécution (HEC) pour chaque PROCESSEUR. Le HEC est un structure de données qui contient toutes les données d'un OS thread de travail nécessite, pour l'exécution de Haskell fils

Vous pouvez surveiller votre fils étant créés, et où ils sont en cours d'exécution, via threadscope.. Ici, par exemple, l'exécution de binaires arbres de référence:

threadscope

14voto

Michael Snoyman Points 14888
  • La chaîne serveur web utilise ces légers fils longuement pour obtenir des performances vraiment très bonne. Notez que les autres Haskell serveurs web également la fumée de la concurrence: ce n'est plus un "Haskell est bon" que "Warp est bon."

  • Haskell fournit une exécution multithread qui peut distribuer léger threads sur plusieurs threads du système. Il fonctionne très bien pour jusqu'à 4 cœurs. Passé cela, il ya quelques problèmes de performance, même si ceux-ci sont activement travaillé sur.

4voto

augustss Points 15750

La création de 1000 processus est relativement léger de poids, ne vous inquiétez pas à propos de le faire. Comme pour les performances, il suffit de référence.

Comme cela a été souligné précédemment, plusieurs cœurs fonctionnent tout aussi bien. Plusieurs Haskell threads peuvent s'exécuter en même temps en étant prévues sur différents OS threads.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X