PPC Extended Version

Post on 28-Dec-2015

51 views 5 download

Transcript of 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ţă  

- «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.  

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

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

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

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

}    

public void run()  {  

try {  for

(i

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

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  

....  

 

 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",  

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#)  

 

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

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

     Thread.sleep(1000);  } catch

(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

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;  

-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.  

   12.Forme și nivele de implementare a paralelismului  

     

   

   13.Modele de programare și concurența  

       14.Problema excluderii reciproce în programarea concurentă  

 

 

 

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

     

       2)Incercare 2 lui Dijkstra  

                         

       3)Incercare 3 lui Dijkstra  

 4)Incercare 4 lui Dijkstra  

     16.Algoritmul Dekker pentru rezolvarea problemei de excludere reciprocă  

     17.Algoritmul Peterson pentru rezolvarea problemei de excludere reciprocă  

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

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

  java.util.concurrent.Semaphore  

 

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)  {  }  

}    

 

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();  

}  }  

 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();  

}  }  

}      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  

             

   

   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 )  

 

                               21.Problema de programare concurentă Jocul Vieții  

   

     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ă.  

   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ă.  

     

                                       24.Problema de programare concurentă Cititori-scriitori  

                 26.Problema de programare concurentă Bărbierul somnoros  

 

                                                                                     

                                                 25.Problema de programare concurentă Bărbierul somnoros  

   27.Problema de programare concurentă Sushi bar