“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 198 — #208
i
i
i
i
i
i
i
i
198
4
• La programmation concurrente dataflow
Figure 4.6 Le Panel Oz montrant la création de fils (« threads ») dans X={Fib 26}.
Le dataflow et les élastiques
Il devient clair que tout programme déclaratif du chapitre 3 peut être rendu concurrent en ajoutant thread ... end autour de quelques-unes de ses instructions et
expressions. Parce que chaque variable dataflow sera liée à la même valeur qu’avant,
le résultat final de la version concurrente sera exactement le même que la version
séquentielle.
Une manière intuitive de comprendre pourquoi est l’analogie des élastiques. Chaque
variable dataflow a son propre élastique. Un bout de l’élastique est attaché là où la
variable est liée et l’autre bout là où la variable est utilisée. La figure 4.7 montre ce
qui se passe dans les modèles séquentiel et concurrent. Dans le modèle séquentiel,
le lien et l’utilisation sont généralement proches, l’élastique ne s’étend donc pas
beaucoup. Dans le modèle concurrent, le lien et l’utilisation peuvent se faire dans des
fils différents, l’élastique s’étend donc plus. Mais il ne se déchire jamais : l’utilisateur
voit toujours la bonne valeur.
La concurrence bon marché et la structure du programme
En utilisant des fils, il est souvent possible d’améliorer la structure d’un programme.
Par exemple, pour le rendre plus modulaire. La plupart de grands programmes
contiennent beaucoup d’endroits où les fils peuvent être utilisés ainsi. Idéalement,
le système sous-jacent devrait soutenir cela avec des fils qui demandent peu de
ressources de calcul. À cet égard, le système Mozart est excellent. Les fils sont
tellement bon marché que l’on peut les créer en grande quantité. Par exemple, un
i
i
i
i
i
i
i
i
198
4
• La programmation concurrente dataflow
Figure 4.6 Le Panel Oz montrant la création de fils (« threads ») dans X={Fib 26}.
Le dataflow et les élastiques
Il devient clair que tout programme déclaratif du chapitre 3 peut être rendu concurrent en ajoutant thread ... end autour de quelques-unes de ses instructions et
expressions. Parce que chaque variable dataflow sera liée à la même valeur qu’avant,
le résultat final de la version concurrente sera exactement le même que la version
séquentielle.
Une manière intuitive de comprendre pourquoi est l’analogie des élastiques. Chaque
variable dataflow a son propre élastique. Un bout de l’élastique est attaché là où la
variable est liée et l’autre bout là où la variable est utilisée. La figure 4.7 montre ce
qui se passe dans les modèles séquentiel et concurrent. Dans le modèle séquentiel,
le lien et l’utilisation sont généralement proches, l’élastique ne s’étend donc pas
beaucoup. Dans le modèle concurrent, le lien et l’utilisation peuvent se faire dans des
fils différents, l’élastique s’étend donc plus. Mais il ne se déchire jamais : l’utilisateur
voit toujours la bonne valeur.
La concurrence bon marché et la structure du programme
En utilisant des fils, il est souvent possible d’améliorer la structure d’un programme.
Par exemple, pour le rendre plus modulaire. La plupart de grands programmes
contiennent beaucoup d’endroits où les fils peuvent être utilisés ainsi. Idéalement,
le système sous-jacent devrait soutenir cela avec des fils qui demandent peu de
ressources de calcul. À cet égard, le système Mozart est excellent. Les fils sont
tellement bon marché que l’on peut les créer en grande quantité. Par exemple, un
