La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Faculté I&C, Claude Petitpierre, André Maurer Le parallélisme Introduction.

Présentations similaires


Présentation au sujet: "Faculté I&C, Claude Petitpierre, André Maurer Le parallélisme Introduction."— Transcription de la présentation:

1 Faculté I&C, Claude Petitpierre, André Maurer Le parallélisme Introduction

2 Faculté I&C, Claude Petitpierre, André Maurer Evénement chaînés onload="f()" f() { } setTimeout(f, 100) f() { } setTimeout(f, 100) f() { } setTimeout(f, 100)

3 Faculté I&C, Claude Petitpierre, André Maurer Evénement chaînés ( setInterval() ) onload="setInterval(f, 100)" f() { } } }

4 Faculté I&C, Claude Petitpierre, André Maurer this.f ? On ne peut pas chaîner les méthodes dun objet de la même façon obj = { f : function() { } x : 15 } setTimeout(this.f, 100) f() { } this.x ? moteur setTimeout(this.f, 100) this.x Possible this est perdu !

5 Faculté I&C, Claude Petitpierre, André Maurer Closures Le chaînage des appels doit être fait par closure ! Une closure = une fonction + attributs + son environnement de variables locales Toute fonction définie à lintérieur dune autre fonction produit en fait une closure Sorte de mini-objet

6 Faculté I&C, Claude Petitpierre, André Maurer Closure var x = null function createClosure (arg) { var vLocale = 10 x = function uneClosure(a) { // fonction définie dans alert(vLocale + a + arg) // une autre fonction }... createClosure(45) x(22)

7 Faculté I&C, Claude Petitpierre, André Maurer Closure Autre façon dy accéder function createClosure (arg) { var vLocale = 10 return function uneClosure(a) { alert(vLocale + a + arg) }... var x = createClosure(45) x(22)

8 Faculté I&C, Claude Petitpierre, André Maurer Closure function createClosure (arg) { var vLocale = 10 return function uneClosure(a) { alert(vLocale + a + arg) } 1.Même après la fin de createClosure, lenvironnement contenant les variables locales de cette fonction sont gardées et restent accessibles dans la fonction uneClosure. 2.Si lon crée deux closures dans la même fonction (même appel), elles partagent le même environnement (qui est celui de la fonction englobante) 3.Si la fonction est définie dans un objet, les attributs de l'objet font partie de la closure

9 Faculté I&C, Claude Petitpierre, André Maurer Closure dans un appel à setTimeout function createClosure (arg) { var vLocale = 10 setTimeout( function uneClosure() { alert(vLocale + arg) }, 1000) }

10 Faculté I&C, Claude Petitpierre, André Maurer Closure dans un appel à setTimeout function createClosure (arg) { var vLocale = 10 function xxx() { alert(vLocale + arg) } setTimeout( xxx, 1000) }

11 Faculté I&C, Claude Petitpierre, André Maurer Animation dans un objet var activeObj = { couleur : "green" run1 : function() { alterneCouleur(this.couleur) var that = this // that est un nom arbitraire clos = function() { that.run2() } setTimeout( clos, 500 ) }, run2 : function() { alterneCouleur("red") var that = this setTimeout( function() { that.run1() }, 500 )}

12 Faculté I&C, Claude Petitpierre, André Maurer Une autre possibilité de définir la séquence var activeObj = { etat : 0, run : function() { switch (etat) { case 0: alterneCouleur("green") etat = 1 break case 1: alterneCouleur("red") etat = 0 break } var that = this setTimeout( function() { that.run() }, 500)}

13 Faculté I&C, Claude Petitpierre, André Maurer Threads La séquence ininterrompue dappels par timeout constitue le fil (de lhistoire), en anglais thread. Si lon crée plusieurs objets de ce type, on pourra garder plusieurs fils actifs indépendants. Un thread est un moyen de suivre plusieurs activités sans les mélanger. Ce concept est à la base de la programmation pseudo- parallèle. Java, C++… offrent des moyens pour créer des threads. En C++, ils ne sont pas liés à un objet. Dans ces langages, le fil peut être commuté à tout instant, pas seulement entre les fonctions. Exemple

14 Faculté I&C, Claude Petitpierre, André Maurer Au moyen dun constructeur function Actif () { var etat = 0 var that = this <<<<<< this.couleur = "green" this.run = function() { switch (etat) { case 0: alterneCouleur("green") etat = 1 break case 1: alterneCouleur("red") etat = 0 break } setTimeout( function() { that.run() }, 500)}

15 Faculté I&C, Claude Petitpierre, André Maurer Extension de Javascript (Compilateur + librairies de LemanOS) process XYZ (nom) { this.run() { for (;;) { waituntil(now() + 2000) }

16 Faculté I&C, Claude Petitpierre, André Maurer Suspension dans un "thread" process Runner() { this.run = function() { if (x>0) waituntil(now()+10) x = 10 } x=0 }

17 Faculté I&C, Claude Petitpierre, André Maurer Découpage par le compilateur this.run = function() { for(;;) { switch(_state) { case 10000: if (x>0) { if (!(x>0)) {_state=10002;break} _state = 10001 waituntil(now()+10) setTimeout(that.run, 10)return case 10001: x = 10 } case 10002: x=0 x = 0 break } } }} compilation

18 Faculté I&C, Claude Petitpierre, André Maurer Appel d'un objet avec thread... p1 = new XYZ() p1.meth()... process XYZ (nom, p1) { this.meth = function() { } this.run() { // boucle infinie for (;;) {... accept meth }

19 Faculté I&C, Claude Petitpierre, André Maurer Synchronisation entre objects rendez-vous process ABC (nom, p1) { this.run() { for (;;) { waituntil(now() + 2000) p1.meth() }}} process XYZ (nom, p1) { this.meth = function() { } this.run() { for (;;) { accept meth }}}

20 Faculté I&C, Claude Petitpierre, André Maurer Attentes concurrentes this.run(nom) { select { case p1.m1() case p2.m2() } this.m1 = function()( { } this.run(nom) { select { case accept m1 case p2.m2() } this.m2 = function()( { } this.run(nom) { select { case accept m2 } Trois rendez-vous possibles

21 Faculté I&C, Claude Petitpierre, André Maurer kernel.js prêts rendez-vous délais

22 Faculté I&C, Claude Petitpierre, André Maurer Oiseaux passant par un couloir Programme Programme process Oiseau() { this.run = function() { for(;;) { // avant le couloir couloir.entrer() // avancer dans le couloir couloir.sortir() // après le couloir } } } process Couloir() { this.entrer() { } this.sortir() { } this.run = function() { for(;;) { accept entrer accept sortir } } }

23 Faculté I&C, Claude Petitpierre, André Maurer select avec toutes les possibilités select { case when (i==0) x = proc.meth() x = x + 1 case when (y>0) accept m2 case when (y<0) waituntil(now() + 1000) }

24 Faculté I&C, Claude Petitpierre, André Maurer Boîte aux lettres // quoi process Poste(nom) { this.fifo = [ ] this.deposer = function (paquet) { this.fifo.push(paquet) } this.prendre= function () { return this.fifo.shift() }... // quand... this.run = function () { for (;;) { select { case accept deposer case when (this.fifo.length>0) accept prendre } waituntil(now()+400) } } } Programme 1 Programme 2


Télécharger ppt "Faculté I&C, Claude Petitpierre, André Maurer Le parallélisme Introduction."

Présentations similaires


Annonces Google