18.04.2013 Views

Tehnici de implementare a concurentei în analiza si proiectarea ...

Tehnici de implementare a concurentei în analiza si proiectarea ...

Tehnici de implementare a concurentei în analiza si proiectarea ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

concurent cu rutina care o apeleaza. De obicei, alaturi <strong>de</strong> instructiunea fork mai este<br />

prezenta <strong>în</strong> limbaj <strong>si</strong> instructiunea join care este utila la <strong>si</strong>ncronizarea activitatilor<br />

concurente (activitatea care executa o instructiune join va fi blocata pâna la<br />

terminarea unui proces specificat <strong>în</strong> instructiune). Dezavantajele acestui mecanism<br />

sunt numeroase. Mentionam aici doar lizibilitatea scazuta a codului sursa <strong>si</strong><br />

dificultatea <strong>de</strong>panarii <strong>si</strong> <strong>în</strong>tretinerii aplicatiilor realizate cu acest mecanism. Acest<br />

fapt se datoreaza <strong>în</strong> principal nivelului scazut al instructiunii care poate fi con<strong>si</strong><strong>de</strong>rata<br />

ca o transpunere a instructiunii go to <strong>în</strong>tr-un mediu concurent.<br />

Pe <strong>de</strong> alta parte, <strong>în</strong>tr-un context orientat-obiect acest mecanism poate<br />

<strong>de</strong>termina distrugerea <strong>în</strong>capsularii din cel putin doua motive. În primul rând<br />

apelatorul unei rutine concurente trebuie sa se a<strong>si</strong>gure ca rutina respectiva poate fi<br />

executata <strong>în</strong> paralel cu restul firelor <strong>de</strong> executie fara a <strong>de</strong>termina incon<strong>si</strong>stente ale<br />

datelor programului. Daca pastrarea con<strong>si</strong>stentei nu este garantata <strong>de</strong> catre<br />

mecanismul <strong>de</strong> coordonare a <strong>concurentei</strong> folo<strong>si</strong>t <strong>în</strong> limbajul <strong>de</strong> programare orientat pe<br />

obiecte (iar <strong>în</strong> majoritatea cazurilor aceste mecanisme nu ofera o astfel <strong>de</strong> garantie,<br />

dupa cum vom observa <strong>în</strong> sectiunea urmatoare), atunci apelatorul trebuie sa cunoasca<br />

<strong>în</strong> <strong>de</strong>taliu <strong>implementare</strong>a rutinei apelate. Acest lucru, <strong>în</strong>sa, va reduce dramatic<br />

utilitatea bibliotecilor <strong>de</strong> clase.<br />

În al doilea rând este practic impo<strong>si</strong>bila modificarea codului rutinei fara a<br />

<strong>analiza</strong> cu atentie toate secventele <strong>de</strong> cod <strong>în</strong> care aceasta rutina este lansata <strong>în</strong> paralel.<br />

Prin urmare, rescrierea unei rutine poate <strong>de</strong>termina adaugarea <strong>de</strong> noi conditii <strong>în</strong><br />

constrângerile <strong>de</strong> <strong>si</strong>ncronizare <strong>de</strong> care apelatorul sau trebuie sa tina seama.<br />

Apelurile a<strong>si</strong>ncrone <strong>de</strong> operatii cu variabile future <strong>si</strong> post-procesarea<br />

mostenesc <strong>în</strong> principal toate aceste <strong>de</strong>zavantaje. Totu<strong>si</strong>, <strong>în</strong> cazul mecanismului <strong>de</strong><br />

post-procesare (<strong>de</strong>seori numit <strong>si</strong> cu retur timpuriu <strong>de</strong>oarece paralelismul este initiat<br />

doar <strong>în</strong> momentul <strong>în</strong> care este <strong>în</strong>tâlnita instructiunea return a unei rutine) poate fi<br />

impusa o disciplina <strong>de</strong> programare care sa evite violarea <strong>în</strong>capsularii. Acest avantaj<br />

fragil este secondat <strong>în</strong>sa <strong>de</strong> o sca<strong>de</strong>re a puterii <strong>de</strong> <strong>de</strong>scriere a <strong>concurentei</strong> (nu pot fi<br />

mo<strong>de</strong>late anumite scenarii <strong>de</strong> concurenta <strong>în</strong>tre procese).<br />

Cobegin - coend (parbegin - parend). Mecanismele din aceasta categorie<br />

permit executia mai multor fire <strong>de</strong> executie concurente <strong>în</strong> acela<strong>si</strong> timp. Astfel,<br />

instructiunile care sunt cuprinse <strong>în</strong>tre cuvintele cheie cobegin <strong>si</strong> coend vor fi lansate<br />

21

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!