Sunteți pe pagina 1din 23

PROGRAMAREA ÎN REȚEA

Tema 3. Concurența -
eficientizarea
procesării în rețea

Aureliu Zgureanu,
conf. univ., dr.

Chișinău 2020
Agenda

1. Problema filozofilor la masă

2.

3.

4.

5.
Problema cinei filozofilor

 propusă de Dijkstra în 1965


 5 filozofi sunt așezați la o masă rotundă
 fiecare filozof are în față o farfurie cu spaghetti
 pentru a mânca spagheti un filozof are nevoie
de două furculițe
 între două farfurii există o furculiță (5 în total)
 viața unui filozof constă din perioade în care
gândește și perioade când mănâncă
Problema cinei filozofilor

Problema constă în:


 cum să proiectăm un model al comportamentului
(un algoritm concurent) astfel încât niciun
filosof să nu moară de foame;
 adică, fiecare poate continua să alterneze
mâncarea și gândirea, presupunând că niciun
filosof nu poate ști când alții pot dori să mănânce
sau să gândească.
Problema cinei filozofilor

 a fost concepută pentru a ilustra problemele în


a evita impasul (deadlock), o stare a
sistemului în care nu este posibil să se
înregistreze progrese.
 pentru a vedea că o soluție adecvată a acestei
probleme nu este evidentă, să analizăm
următorul comportament al fiecărui filozof:
Problema cinei filozofilor

 Soluție incorectă - permite sistemului să ajungă


la o stare de impas, în care nu este posibil niciun
progres.
 Aceasta este o stare în care fiecare filosof a
ridicat furculița din stânga și așteaptă ca furculița
din dreapta să devină disponibilă.
 Cu instrucțiunile date, se poate ajunge la
această stare și, atunci când se ajunge, fiecare
filosof va aștepta veșnic ca altul (cel din dreapta)
să elibereze o furculiță.
Problema cinei filozofilor

 Înfometarea resurselor (Resource starvation)


poate apărea, de asemenea, independent de
impas, dacă un anumit filosof nu este în
măsură să ia ambele furculițe din cauza unei
probleme de sincronizare.
 De exemplu, ar putea exista o regulă ca
filozofii să pună o furculiță după ce așteptau
zece minute pentru ca cealaltă furculiță să
devină disponibilă și să aștepte încă zece
minute înainte de a face următoarea încercare.
Problema cinei filozofilor

 Această schemă elimină posibilitatea blocării


(sistemul poate avansa întotdeauna într-o stare
diferită), dar suferă în continuare de problema
resurselor.
 Dacă toți cei cinci filosofi apar în sala de mese
în același timp și fiecare ridică furculița din
stânga în același timp, filozofii vor aștepta zece
minute până când toți își pun furculițele și apoi
așteaptă încă zece minute înainte de a le alege
cu toții.
Problema cinei filozofilor

 excluderea reciprocă (Mutual exclusion) este


ideea de bază a problemei;
 filosofii de la masă creează un scenariu generic
și abstract util pentru explicarea problemelor de
acest tip. Eșecurile pe care le pot întâmpina
acești filosofi sunt similare cu dificultățile care
apar în programarea computerului real atunci
când mai multe programe au nevoie de acces
exclusiv la resurse partajate. Aceste probleme
sunt studiate în programarea concurentă.
Problema cinei filozofilor

 Problemele originale ale Dijkstra au fost legate de


dispozitive externe precum unitățile cu bandă. Cu
toate acestea, dificultățile exemplificate de
problema filozofilor apar mult mai des atunci când
mai multe procese accesează seturi de date care
sunt actualizate.
 Sistemele complexe, cum ar fi nucleele sistemului
de operare folosesc mii de blocaje și sincronizări
care necesită respectarea strictă a metodelor și
protocoalelor, dacă se vor evita astfel de probleme
precum impasul, înfometarea și coruperea datelor.
Problema cinei filozofilor.
S1. Ierarhizarea resurselor
 propusă inițial de Dijkstra.
 Acesta atribuie o ordine parțială resurselor (furculițelor) și
stabilește convenția potrivit căreia toate resursele vor fi
solicitate în ordinea stabilită și că nu vor fi folosite
niciodată două resurse fără legătură de ordine de aceeași
entitate în acelașii timp.
 Aici, resursele (furculițele) vor fi numerotate de la 1 la 5 și
fiecare unitate de lucru (filozof) va ridica întotdeauna mai
întâi furculița cu număr mai mic, iar apoi furculița cu
număr mai mare. Le returnează în ordinea inversă.
Problema cinei filozofilor.
S1. Ierarhizarea resurselor

 În acest caz, dacă patru dintre cei cinci filosofi își ridică
simultan furculița cu număr mai mic, doar furculița cu cel
mai mare număr va rămâne pe masă, deci cel de-al
cincilea filosof nu va putea să ridice nicio furculiță.
 Mai mult decât atât, un singur filosof va avea acces la
acea furculiță cu cel mai mare număr, astfel încât vor
putea mânca folosind două furculițe.
Problema cinei filozofilor.
S1. Ierarhizarea resurselor
 Soluția de ierarhizare a resurselor evită blocajele, dar nu este
întotdeauna practică, mai ales când lista resurselor necesare
nu este complet cunoscută în avans.
 De exemplu, dacă o unitate de muncă deține resursele 3 și 5
și apoi determină că are nevoie de resursa 2, trebuie să
elibereze 5, apoi 3 înainte de a achiziționa 2, iar apoi trebuie
să re-achiziționeze 3 și 5 în această ordine.
 Programele de calculator care accesează un număr mare de
înregistrări ale bazei de date nu ar rula eficient dacă li s-ar
solicita eliberarea tuturor înregistrărilor cu un număr mai
mare înainte de accesarea unei noi înregistrări, ceea ce face
ca această metodă să nu fie practică în acest scop.
Problema cinei filozofilor.
S2. Arbitrul

 O altă abordare constă în garantarea faptului că un filosof nu


poate ridica decât ambele furculițe sau nici una, introducând
un arbitru, de exemplu, un chelner.
 Pentru a ridica furculițele, un filozof trebuie să ceară
permisiunea chelnerului. Chelnerul dă permisiunea unui
singur filosof la un moment dat până când filosoful a ridicat
ambele furculițe. Punerea jos a unei furculițe este
întotdeauna permisă.
 Chelnerul aici are rolul de semafor (Semaphore).
Problema cinei filozofilor.
S3. Monitorul
 Furculițele nu sunt prezentate explicit.
 Filozofii pot mânca dacă niciunul dintre vecinii lor
nu mănâncă.
 Filosofii care nu pot lua cea de-a doua furculiță
trebuie să pună prima furculiță înainte de a
încerca din nou.
Problema cinei filozofilor.
S3. Monitorul
 În lipsa blocajelor asociate cu furculițele, filozofii
trebuie să se asigure că începutul mâncării nu se
bazează pe informații vechi despre starea
vecinilor.
 De exemplu: Dacă filosoful B vede că A nu
mănâncă la un moment dat și apoi se întoarce și
se uită la C, A ar putea începe să mănânce în
timp ce filosoful B se uită la C.
Problema cinei filozofilor.
S3. Monitorul
 Folosind un singur blocaj reciproc (Mutex),
această problemă poate fi evitată.
 Această blocare nu este asociată cu furculițele, ci
este asociată cu proceduri de rezolvare care pot
schimba starea filosofilor. Acest lucru este furnizat
de monitor.
 Algoritmul monitorului implementează schema
„verificare, luare și punere” și partajează un blocaj
reciproc exclusiv. Rețineți că filosofii cărora le
este foame nu vor avea furculițe!!!
Problema cinei filozofilor.
S3. Monitorul
 Algoritmul monitorului implementează schema
„verificare, luare și punere” și partajează excluderea
reciprocă a blocajului. Rețineți că filosofii cărora le
este foame nu vor avea furculițe!!!
 Dacă monitorul permite filosofului care vrea să
mănânce să acționeze, atunci filosoful va intra din
nou în posesia primei furculițe înainte de a o lua pe a
doua deja liberă.
 La sfârșitul mesei curente, filozoful anunță monitorul
că ambele furculițe sunt libere.
Ce este Concurența?

 Se spune că două evenimente sunt concurente


dacă au loc în același interval de timp.
 Două sau mai multe sarcini (tasks) care se execută
în același interval de timp se execută concurent
 În programarea concurentă, există două unități de
bază de execuție:
– Procese
– Fire de execuție.
Procese, fire...

 Un proces are un mediu de execuție de sine


stătător. Un proces are, în general, un set complet,
privat de resurse de bază în timpul rulării; în special,
fiecare proces are propriul spațiu de memorie. Un
proces este, în esenţă,un program ce se află în
execuţie.
 Firele de execuție există în cadrul unui proces -
fiecare proces are cel puțin un fir. Firele distribuie
resursele procesului, inclusiv memoria și fișierele
deschise. Aceasta face o comunicare eficientă, dar
potențial problematică.
Procese, fire...

 Firul flux secvențial separat de control în cadrul unui


program:
Procese, fire...

 Continuare pe
Fire de executie. Tithreads (Java).pdf

S-ar putea să vă placă și