“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 216 — #226
i
i
i
i
i
i
i
i
216
4
• La programmation concurrente dataflow
➤ Exercice 3 — Fibonacci concurrente et séquentielle
Prenez cette définition séquentielle de la fonction Fibonacci :
fun {Fib X}
if X=<2 then 1 else {Fib X-1}+{Fib X-2} end
end
et comparez-la avec la définition concurrente de la section 4.2.3. Exécutez-les
toutes les deux et comparez leurs performances. Quelle est la différence en temps
d’exécution entre les deux ? Combien de fils sont créés par l’appel concurrent
{Fib N} en fonction de N ?
➤ Exercice 4 — L’opération Wait
Expliquez pourquoi l’opération {Wait X} peut être définie comme ceci :
proc {Wait X}
if X==unit then skip else skip end
end
Utilisez vos connaissances du comportement dataflow de l’instruction if et de
l’opération ==.
➤ Exercice 5 — L’ordonnancement des fils
La section 4.4.2 montre comment sauter au-delà des éléments déjà calculés d’un
flot. Si nous utilisons cette technique pour additionner les éléments du flot d’entiers de la section 4.3.1, le résultat sera beaucoup plus petit que 11249925000, la
somme de tous les entiers du flot. Expliquez pourquoi en utilisant vos connaissances de l’ordonnancement des fils.
➤ Exercice 6 — Le comportement dataflow dans un contexte concurrent
Considérez la fonction {Filter In F} qui renvoie les éléments de In pour
lesquels la fonction booléenne F renvoie true. Voici une définition possible de
Filter :
fun {Filter In F}
case In of X|In2 then
if {F X} then X|{Filter In2 F}
else {Filter In2 F} end
else nil end
end
L’exécution de l’instruction suivante :
{Show {Filter [5 1 2 4 0] fun {$ X} X>2 end}}
affiche
[5 4]
(Nous utilisons la procédure Show, qui affiche la valeur instantanée de son
argument. Contrairement à Browse, cet affichage n’est pas mis à jour si l’argument est lié plus tard.) Filter fonctionne comme on pouvait s’y attendre
Précédent

- 231/370

Suivant