“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 15 — #25
i
i
i
i
i
i
i
i
1.10 Le dataflow
15
Nous introduisons la concurrence en créant des fils. Un fil (« thread » en anglais)
est simplement un programme en exécution, comme les fonctions que l’on a vues
auparavant. La différence est que maintenant un programme peut avoir plusieurs fils.
Les fils sont créés avec l’instruction thread. Vous vous souvenez de la lenteur de
la première fonction Pascal ? Nous pouvons appeler Pascal dans son propre
fil. Ainsi, elle n’empêchera pas les autres calculs d’avancer. Ils pourront ralentir si
Pascal fait vraiment beaucoup de calculs. Cela arrivera si les fils partagent le même
processeur. Mais aucun fil ne s’arrêtera. Voici un exemple :
thread {Browse {Pascal 30}} end
{Browse 99 * 99}
qui crée un nouveau fil. Dans ce fil, nous appelons {Pascal 30} et puis Browse
pour afficher le résultat. Le nouveau fil fait beaucoup de calculs. Mais cela n’empêche
pas le système d’afficher 99 * 99 sans délai.
1.10 LE DATAFLOW
Que se passe-t-il si une opération essaie d’utiliser une variable qui n’est pas encore
liée ? D’un point de vue esthétique, il serait agréable que l’opération attende tout simplement. Si un autre fil lie la variable, l’opération pourra continuer. Ce comportement
civilisé s’appelle le dataflow (« flux de données »). La figure 1.3 montre un exemple
simple : les deux multiplications attendent jusqu’à ce que leurs arguments soient liés
et l’addition attend jusqu’à ce que les multiplications soient complétées. Comme nous
le verrons plus loin, il y a de nombreuses raisons d’utiliser le comportement dataflow.
Pour l’instant, voyons comment le dataflow et la concurrence fonctionnent ensemble.
Prenez par exemple :
declare X in
thread {Delay 10000} X=99 end
{Browse start} {Browse X * X}
X
Y
Z
U
*
*
+
Figure 1.3 Un exemple simple de l’exécution dataflow.
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
1.10 Le dataflow
15
Nous introduisons la concurrence en créant des fils. Un fil (« thread » en anglais)
est simplement un programme en exécution, comme les fonctions que l’on a vues
auparavant. La différence est que maintenant un programme peut avoir plusieurs fils.
Les fils sont créés avec l’instruction thread. Vous vous souvenez de la lenteur de
la première fonction Pascal ? Nous pouvons appeler Pascal dans son propre
fil. Ainsi, elle n’empêchera pas les autres calculs d’avancer. Ils pourront ralentir si
Pascal fait vraiment beaucoup de calculs. Cela arrivera si les fils partagent le même
processeur. Mais aucun fil ne s’arrêtera. Voici un exemple :
thread {Browse {Pascal 30}} end
{Browse 99 * 99}
qui crée un nouveau fil. Dans ce fil, nous appelons {Pascal 30} et puis Browse
pour afficher le résultat. Le nouveau fil fait beaucoup de calculs. Mais cela n’empêche
pas le système d’afficher 99 * 99 sans délai.
1.10 LE DATAFLOW
Que se passe-t-il si une opération essaie d’utiliser une variable qui n’est pas encore
liée ? D’un point de vue esthétique, il serait agréable que l’opération attende tout simplement. Si un autre fil lie la variable, l’opération pourra continuer. Ce comportement
civilisé s’appelle le dataflow (« flux de données »). La figure 1.3 montre un exemple
simple : les deux multiplications attendent jusqu’à ce que leurs arguments soient liés
et l’addition attend jusqu’à ce que les multiplications soient complétées. Comme nous
le verrons plus loin, il y a de nombreuses raisons d’utiliser le comportement dataflow.
Pour l’instant, voyons comment le dataflow et la concurrence fonctionnent ensemble.
Prenez par exemple :
declare X in
thread {Delay 10000} X=99 end
{Browse start} {Browse X * X}
X
Y
Z
U
*
*
+
Figure 1.3 Un exemple simple de l’exécution dataflow.
© Dunod – La photocopie non autorisée est un délit
