PPC Extended Version

37
1.Utilitatea concurenței. A vantaje și dezavantaje A vantaje: 1)Creșterea vitezii de excuție; a.Un fir pentru GUI; b.Acc es parale l la BD și pagini Web; 2)Programarea reactivă: a)Utilizatorul poate interacţiona cu aplicaţii în timp ce sarcini se execută, de exemplu, oprirea transferul unui fişier mare într- un browser web; b)Disponibilitatea de servicii - Sarcini de lunga durata nu trebuie să întârzie cu cele de scurtă durată, de exemplu, un server de web poate servi o pagină,care în acelaşi timp, este procesată o interogare complexă Paralelism - Programe complexe pot face o mai bună utilizare a resurselor multiple în noi arhitecturile multi-core procesor , PMM, LAN sau WAN-urile, de exemplu, ştiinţifice / aplicaţii de inginerie, simulari, jocuri, etc Controlabilitate - Sarcini care necesită anumite condiţii prealabile poate suspenda şi aşteptaţi până când deţin precondiţii, apoi relua executarea transparent. 2)Protecție- izolarea unor algoritmi în fire aparte. Dezavantaje: 1)Siguranţă

Transcript of PPC Extended Version

Page 1: PPC Extended Version

1.Utilitatea concurenței. Avantaje și dezavantaje  Avantaje:  1)Creșterea vitezii de excuție;  

a.Un fir pentru GUI;  b.Acc

es paralel la BD și pagini Web;  

2)Programarea reactivă:  a)Utilizatorul poate interacţiona cu aplicaţii în timp ce sarcini

se execută, de exemplu, oprirea transferul unui fişier mare într-un browser web;  b)Disponibilitatea de servicii  - Sarcini de lunga durata nu trebuie să întârzie cu cele de scurtă durată, de exemplu, un server de web poate servi o pagină,care în acelaşi timp, este procesată o interogare complexă  • Paralelism  - Programe complexe pot face o mai bună utilizare a resurselor multiple în noi arhitecturile multi-core procesor, PMM, LAN sau WAN-urile, de exemplu, ştiinţifice / aplicaţii de inginerie, simulari, jocuri, etc  • Controlabilitate  - Sarcini care necesită anumite condiţii prealabile poate suspenda şi aşteptaţi până când deţin precondiţii, apoi relua executarea transparent.  2)Protecție-izolarea unor algoritmi în fire aparte. Dezavantaje:  1)Siguranţă  

Page 2: PPC Extended Version

- «Nimic nu se întâmplă niciodată rău»  - Sarcini concurente nu ar trebui să nu corupt coerentă a programului  • vivacitatea  - «Orice vreodată se întâmplă la toate»  - Sarcini nu ar trebui să suspende pe termen nelimitat şi aşteptaţi pentru fiecare alte (impas).  • non-determinism  - Mastering numărul exponenţială a interleavings datorită programe diferite.  • Consumul de resurse  - Fire poate fi costisitoare. Suspendate de programare, context-comutare, şi sincronizare.  - Programe concurente poate rula mai lent decât omologii lor secvenţială  chiar cu mai multe procesoare!  

   2)Calcul distribuit, paralel și concurent: relații și caracteristici  a)Sistem de calcul paralel:  Procesoarele de obicei sunt de același tip;  Scopul:Executarea unor calcule mai rapid decât cu un singur procesor. b)Sistem de calcul distribuit:  a)Procesoarele sunt de obicei eterogene;  Sistemele distribuite au apărut ca o necesitate pentru:  - schimbul de informaţii între noduri;  - partajarea unor resurse (printere, memorie backup, unităţi de disc etc.);  - siguranţa în funcţionare: dacă un nod \"cade\", întregul sistem trebuie (dacă este posibil) să fie capabil să asigure în continuare funcţionarea, prin redirijarea (rutarea) mesajelor prin nodurile funcţionale.  

Page 3: PPC Extended Version

c)Sistem de calcul concurent:  Coordonarea activității multi-tasks, multithread.  

   3.Programarea obiect-orientată și efectele nefaste ale concurenței (deadlock, livelock, starvation, race condition) Deadlock-o situaţie în care două sau mai multe acţiuni concurente sunt, fiecare în aşteptare , ca una sau cealalata acțiune să se termine, şi, astfel, nici nu se va finisa vreodată.  Livelock - cu excepţia faptului că stările din proceselor implicate în livelock constant schimba cu  privire la una alta, nici una progresează.  Race Condition - as condiţie apare atunci când mai multe fire a unei applicaței multithread încercă să obţină acces simultan la date.Și nu se cunoaște care fir se va executa(Nedeterminist).  

   4)Recomandări generale pentru programe concurentă:  a)Trebuie să fie cunoscut protocolul de interacțiune,pentru evitarea deadlock;  b)De minimizat interacțiunile concurente.  

   6)Limbajul Java: crearea firelor de execuție (clasa Thread și interfața Runnable)  getName → Obtain a thread’s name. getPriorit

Page 4: PPC Extended Version

y → Obtain a thread’s priority.  isAlive → Determine if a thread is still running. Join → Wait for a thread to terminate.  run → Entry point for the thread.  Sleep → Suspend a thread for a period of time. Start → Start a thread by calling its run method.  public class csj01x2 implements Runnable  {  

public static void main(String args[]) throws Throwable  {  

csj01x2 obj1 = ne

Page 5: PPC Extended Version

w csj01x2(); csj01x2 obj2 = new csj01x2(); new Thread(obj1).start();  new Thr

Page 6: PPC Extended Version

ead(obj2).start();  // main thread is ending here,  // Thread-0 and Thread-1 continue to run.  

}    

public void run()  {  

try {  for

(i

Page 7: PPC Extended Version

nt i=0; i<100; i++) { System.out.println("thr

Page 8: PPC Extended Version

ead "  

+Thread.currentThread().getName()+" step "+i); Thread.sleep(500);  

}  } catch (Throwable t) { }  

}  }output:  

 thread Thread-0 step 0 thread Thread-1 step 0 thread Thread-0 step 1 thread Thread-1 step 1 thread Thread-0 step 2 thread Thread-1 step 2  

....  

 

Page 9: PPC Extended Version

 7)LimbajulC#:creareafirelordeexecuție(Thread,Invocăriasincrone,ThreadPool) . C # sprijină execuţia în paralel a codului prin multithreading.Un fir este o cale de executare independent, capabil de a rula simultan cu alte fire.  class  ThreadTest  {  static  void  Main()  {  Thread  t  =  new  Thread  (WriteY);  //  Kick  off  a  new  thread  t.Start();                                      //  running  WriteY()  

   //  Simultaneously,  do  something  on  the  main  thread.  for  (int  i  =  0;  i  <  1000;  i++)  Console.Write  ("x");  }  

   static  void  WriteY()  {  for  (int  i  =  0;  i  <  1000;  i++)  Console.Write  ("y");  }  

}          b)asyncronis static  void  Main()  {  Func<string,  int>  method  =  Work;  IAsyncResult  cookie  =  method.BeginInvoke  ("test",  

Page 10: PPC Extended Version

null,  null);  //  

//  ...  here's  where  we  can  do  other  work  in  parallel...  //  int  result  =  method.EndInvoke  (cookie);  Console.WriteLine  ("String  length  is:  "  +  result);  

}      static  int  Work  (string  s)  {  return  s.Length;  }  

                   c)threadPool  static  void  Main()  {  ThreadPool.QueueUserWorkItem  (Go);  ThreadPool.QueueUserWorkItem  (Go,  123);  Console.ReadLine();  

}      static  void  Go  (object  data)  //  data  will  be  null  with  the  first  call.  {  Console.WriteLine  ("Hello  from  the  thread  pool!  "  +  data);  

}    8.Structuri primitive de sincronizare și stările unui fir de execuție(Limbajul Java/C#)  

 

Page 11: PPC Extended Version

// This program uses a synchronized block. class Callme {  void call(String msg) { Syste

Page 12: PPC Extended Version

m.out.print("[" + msg); try {  

     Thread.sleep(1000);  } catch

Page 13: PPC Extended Version

(InterruptedException e) { System.out.println("Interrupted");  } System.out.println("]");  }  }  class Caller implements Runnable { String msg;  Callme target; Thread t;  public Caller(Callme targ, String s) {  target = targ;  msg = s;  t = new Thread(this);  t.start();  }  // synchronize calls to call()  public void run() {  synchronized(target) { // synchronized block

Page 14: PPC Extended Version

target.call(msg);  }  }  }  class Synch1 {  public static void main(String args[]) { Callme target = new Callme();  Caller ob1 = new Caller(target, "Hello");  Caller ob2 = new Caller(target, "Synchronized"); Caller ob3 = new Caller(target, "World");  // wait for threads to end try {  ob1.t.join(); ob2.t.join(); ob3.t.join();  } catch(InterruptedException e) {  

 System.out.println("Interrupted");  }  }  }  

9.Calculul paralel ca și strategie de a rezolva mai rapid probleme de complexitate ridicată.  -Modelarea schimbării climei și prognozarea vremii;  -Inginerie genetică;  -Sinteza noilor materiale;  -Simulări aeronautice;  

Page 15: PPC Extended Version

-Simulare structuri/construcții automobile;  -Modelare economico-financiară;  -Oprimizarea extragerii petrolului și gazului.  

   10.Calcul paralel: definiții și criteriile arhitecturale(partajarea resurselor, accesul la date, comunicarea, sincronizarea)  Almasi și Gotlieb → CP- o colecție de elemente de procesare ce comunică și cooperează pentru  a rezolva mult mai rapid probleme de procesare de dimesiuni mari.  Foster → un set de procesare capabile sa coopereze pentru rezolvarea unor probleme de calcul.  Soluții dependente de arhitecturi →  -Partajarea resurselor;  -Accesul la date;  -Comunicarea;  -Sincronizarea.  

   11.Factori negativi în dezvoltarea și utilizarea calculatoarelor paralele.  a)Prețul înalt al sistemelor paralele.  Legea lui Grosh → productivitatea calculatorului crește proporțional prețului la pătrat;  b)Pierderi de productivitate legate de organizarea paralelismului;  Legea lui Minsky → Accelerarea atinsă la utilizarea sistemelor paralele este proporțională lagaritmului în baza doi de numărul de procesoare;  c)Perfecționarea continuă a calculatoarelor secvențiale;  Legea lui Moore → Productivitatea calculatoarelor paralele crește de două ori în fiecare 18 luni. d)Dependența eficienței paralelismului de caracteristicile arhitecturale și funcționale ale sistemelor paralele;  e)Aplicațiile existente sunt orientate în special spre mașini secvențiale.  

Page 16: PPC Extended Version

   12.Forme și nivele de implementare a paralelismului  

     

   

   13.Modele de programare și concurența  

Page 17: PPC Extended Version

       14.Problema excluderii reciproce în programarea concurentă  

 

 

 

Page 18: PPC Extended Version

 15.Încercările Dijkstra pentru rezolvarea problemei de excludere reciprocă  1)Incercare 1 lui Dijkstra  

     

       2)Incercare 2 lui Dijkstra  

                         

Page 19: PPC Extended Version

       3)Incercare 3 lui Dijkstra  

 4)Incercare 4 lui Dijkstra  

     16.Algoritmul Dekker pentru rezolvarea problemei de excludere reciprocă  

Page 20: PPC Extended Version

     17.Algoritmul Peterson pentru rezolvarea problemei de excludere reciprocă  

       18.Semaforul Dijkstra și rezolvarea problemei de excludere reciprocă  

Page 21: PPC Extended Version

     19.Clase Semaphore în limbaje de programare (Limbajul Java/C#)  

  java.util.concurrent.Semaphore  

 

Page 22: PPC Extended Version

A counting semaphore. The methods acquire() and release() are used here instead of P() and V(). Each acquire() blocks if necessary until a permit is available, and then takes it. Each release() adds a permit, potentially releasing a blocking acquirer. [1]  

 import java.util.concurrent.Semaphore;  import java.util.Random;    //Solving the mutual exclusion problem using Semaphore class    class Process2 extends Thread  {  

private static final Random rand = new Random();    

private int id;    

private Semaphore sem;    

public Process2(int i, Semaphore s)  {  

id = i;  sem = s;  

}    

private void busy()  {  

try  {  

   sleep(rand.nextInt(500));  

} catch (InterruptedException e)  {  }  

}    

Page 23: PPC Extended Version

 

Page 24: PPC Extended Version

private void noncritical()  {  

System.out.println("Thread " + id + " is NON critical");  busy();  

}    

private void critical()  {  

System.out.println("Thread " + id + " entering critical section");  busy();  System.out.println("Thread " + id + " leaving critical section");  

}    

public void run()  {  

for (int i = 0; i < 2; ++i)  {  

noncritical();  try  {  

sem.acquire();  } catch (InterruptedException e)  {  

// ...  }  critical();  sem.release();  

}  }  

Page 25: PPC Extended Version

 public static void main(String[] args)  {  

final int N = 4;    

System.out.println("Busy waiting...");    

//Semaphore(int permits, boolean fair) Semaphore sem = new Semaphore(N, true);  

 Process2[] p = new Process2[N];  

 for (int i = 0; i < N; i++)  {  

p[i] = new Process2(i, sem);  p[i].start();  

}  }  

Page 26: PPC Extended Version

}      20.Tehnici de sincronizarea a activităților concurente: signaling, rendez-vous, mutex, multiplex, bariera.  

1) Semnalizare- este procedeul cind dorim sa asiguram o executie a unei secvente de  instructiuni din diferite fire concurente  

2) Rendez-vous- est eprocedeul cind dorim sa ne asiguram ca la un moment dat de executtie un fir sa astepte alt fir si invers  

           

       

3) Mutex- este procedeul cind dorim sa asigurame excluderea reciproca  

             

   

Page 27: PPC Extended Version

   4) Multiplex- este procedeul utilizxat cind avem mai multe fire de executie m si dorim sa permitema cccesul la un numar n de fire n<m  

5) Bariera 1- este problema care solutioneaza redez-vous generalizata(num de fire>2)  

                             

6) Bariera2 - este problema care solutioneaza redez-vous generalizata(num de fire>2 si toate firele pleaca dupa ce ultimul isi va executa operatia lui critica )  

 

Page 28: PPC Extended Version

                               21.Problema de programare concurentă Jocul Vieții  

Page 29: PPC Extended Version

   

     22.Problema de programare concurentă Producător-consumator  Producătorul produce articole care sunt așezate pe o bandă.Consumatorul ia de ăe bandă articolele și le consumă.  

Page 30: PPC Extended Version

   23.Problema de programare concurentă Filosofii chinezi  La o masă rotundă stau 5 filozofi chinezi.Principala lor activitate este cea de gândi, dar evident din când în când trebuie să mănânce,folosind pentru aceasta 2 bețișoare.Știind că înte oricare 2 filozofi se află un bețișor și că un filozof poate mînca doar dacă a ridicat de pe masă atât bețișorul din stînga sa,cât și bețișorul din dreapta, se cere să se simuleze activitățile filozofilor așezați la masă.  

     

Page 31: PPC Extended Version

                                       24.Problema de programare concurentă Cititori-scriitori  

Page 32: PPC Extended Version

                 26.Problema de programare concurentă Bărbierul somnoros  

Page 33: PPC Extended Version

 

Page 34: PPC Extended Version

                                                                                     

Page 35: PPC Extended Version

                                                 25.Problema de programare concurentă Bărbierul somnoros  

Page 36: PPC Extended Version

   27.Problema de programare concurentă Sushi bar  

Page 37: PPC Extended Version