“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 203 — #213
i
i
i
i
i
i
i
i
4.3 Les flots
203
même programme peut s’exécuter dans différentes structures réparties sur différents
ensembles de processus, et il donnera toujours le même résultat.
2
4.3 LES FLOTS
La technique la plus courante dans le modèle déclaratif concurrent est l’utilisation
des flots. Un flot (« stream » en anglais) est une liste potentiellement illimitée de
messages, plus précisément c’est une liste dont la queue est une variable dataflow non
liée. L’envoi d’un message est fait par l’extension du flot d’un élément : la queue du
flot est liée à une paire de liste qui contient le message et une nouvelle queue non liée.
La réception d’un message revient à lire un élément du flot. Un fil qui communique
avec des flots est une sorte d’« objet actif » que nous appellerons un objet à flots.
Aucun verrou ou exclusion mutuelle n’est nécessaire parce que chaque variable est
liée par un seul fil.
La programmation par flots est une approche générale que l’on peut utiliser dans
beaucoup de domaines. C’est le concept qui est à la base des tuyaux Unix (« pipes »).
Morrison l’utilise à bon escient dans des applications industrielles, avec une approche
qu’il appelle « flow-based programming » [68]. Nous étudions un cas spécial de la
programmation par flots, la programmation par flots déterministe, dans lequel chaque
objet à flots sait toujours d’où viendra le message suivant. Ce cas est intéressant parce
qu’il est déclaratif. Il est déjà très utile. Nous n’étudierons pas ici la programmation
par flots non-déterministe.
3
4.3.1 Le producteur/consommateur
Nous expliquons d’abord comment fonctionnent les flots et ensuite comment programmer un producteur/consommateur asynchrone avec des flots. Un flot est une liste dont
la queue est une variable non liée :
declare Xs Xs2 in
Xs=0|1|2|3|4|Xs2
Un flot est construit incrémentalement en liant la queue à un autre flot :
declare Xs3 in
Xs2=5|6|7|Xs3
Un fil, que l’on appelle le producteur, crée le flot de cette manière, et d’autres
fils, appelés les consommateurs, lisent le flot. Parce que la queue du flot est une
2. C’est exactement vrai si aucun processus n’échoue. Pour des exemples et plus d’informations voir [97].
3. La programmation par flots non-déterministe est expliquée dans [97].
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
4.3 Les flots
203
même programme peut s’exécuter dans différentes structures réparties sur différents
ensembles de processus, et il donnera toujours le même résultat.
2
4.3 LES FLOTS
La technique la plus courante dans le modèle déclaratif concurrent est l’utilisation
des flots. Un flot (« stream » en anglais) est une liste potentiellement illimitée de
messages, plus précisément c’est une liste dont la queue est une variable dataflow non
liée. L’envoi d’un message est fait par l’extension du flot d’un élément : la queue du
flot est liée à une paire de liste qui contient le message et une nouvelle queue non liée.
La réception d’un message revient à lire un élément du flot. Un fil qui communique
avec des flots est une sorte d’« objet actif » que nous appellerons un objet à flots.
Aucun verrou ou exclusion mutuelle n’est nécessaire parce que chaque variable est
liée par un seul fil.
La programmation par flots est une approche générale que l’on peut utiliser dans
beaucoup de domaines. C’est le concept qui est à la base des tuyaux Unix (« pipes »).
Morrison l’utilise à bon escient dans des applications industrielles, avec une approche
qu’il appelle « flow-based programming » [68]. Nous étudions un cas spécial de la
programmation par flots, la programmation par flots déterministe, dans lequel chaque
objet à flots sait toujours d’où viendra le message suivant. Ce cas est intéressant parce
qu’il est déclaratif. Il est déjà très utile. Nous n’étudierons pas ici la programmation
par flots non-déterministe.
3
4.3.1 Le producteur/consommateur
Nous expliquons d’abord comment fonctionnent les flots et ensuite comment programmer un producteur/consommateur asynchrone avec des flots. Un flot est une liste dont
la queue est une variable non liée :
declare Xs Xs2 in
Xs=0|1|2|3|4|Xs2
Un flot est construit incrémentalement en liant la queue à un autre flot :
declare Xs3 in
Xs2=5|6|7|Xs3
Un fil, que l’on appelle le producteur, crée le flot de cette manière, et d’autres
fils, appelés les consommateurs, lisent le flot. Parce que la queue du flot est une
2. C’est exactement vrai si aucun processus n’échoue. Pour des exemples et plus d’informations voir [97].
3. La programmation par flots non-déterministe est expliquée dans [97].
© Dunod – La photocopie non autorisée est un délit
