47 votes

Qu'est-ce qu'une "étincelle" en Haskell ?

Je suis confus quant à la notion d'"étincelle".

S'agit-il d'un fil en Haskell ? Ou est-ce l'action de créer un nouveau fil ?

Merci à tous :

Donc, pour résumer, les étincelles ne sont pas des threads mais plutôt des unités de calcul (des tâches pour le dire en termes C#/Java). C'est donc la manière Haskell d'implémenter le parallélisme des tâches.

92voto

Don Stewart Points 94361

Les étincelles ne sont pas des fils. forkIO introduit des threads Haskell (qui correspondent à moins de threads réels de l'OS). Les Sparks créent des entrées dans les files d'attente de travail pour chaque thread, d'où ils prendront des tâches à exécuter si le thread devient inactif.

Par conséquent, les étincelles sont très bon marché (vous pouvez en avoir des milliards dans un programme, alors que vous n'aurez probablement pas plus d'un million de threads Haskell, et moins d'une douzaine de threads OS sur une demi-douzaine de cœurs).

Pensez-y comme ça :

spark model

32voto

Apocalisp Points 22526

Ver Une introduction douce à Glasgow Parallel Haskell.

Le parallélisme est introduit dans la GPH par la fonction par qui prend deux arguments qui doivent être évalués en parallèle. L'expression p `par` e (nous utilisons ici la notation des opérateurs infixes de Haskell) a la même valeur que e et n'est pas strict dans son premier argument, c'est à dire bottom `par` e a la valeur de e . ( bottom dénote un calcul qui ne se termine pas ou qui échoue). Son comportement dynamique consiste à indiquer que p pourrait être évalué par un nouveau thread parallèle, le thread parent poursuivant l'évaluation de e . Nous disons que p a été a suscité et un thread peut être créé par la suite pour l'évaluer si un processeur devient inactif. Comme le thread n'est pas nécessairement créé, p est similaire à un un avenir tranquille .

[Souligné dans l'original]

3voto

Paul Johnson Points 8604

Si je comprends bien, une étincelle est une entrée dans une file d'attente de tâches nécessitant un travail. Un pool de threads prend les entrées de cette file et les exécute. Typiquement, il y a un thread par processeur physique, donc ce schéma maximise le débit et minimise le changement de contexte du thread.

0voto

Aftershock Points 1602

Il semble que ce soit similaire à une "tâche" dans les blocs de construction Intel Threading.

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