Mecanisme de specificare și interacțiune a activităților concurente în programarea orientată pe obiecte

Referat
7/10 (1 vot)
Conține 1 fișier: doc
Pagini : 4 în total
Cuvinte : 2439
Mărime: 18.51KB (arhivat)
Publicat de: Minodora Barbu
Puncte necesare: 5
Profesor îndrumător / Prezentat Profesorului: Florin Tutuianu
Sunt analizate mecanismele de specificare a concurentei in limbajele de programare orientate obiect existente pana in prezent, cu evidentierea avantajelor si dezavantajelor fiecaruia dintre acestea. Nici unul dintre aceste mecanisme nu se distinge ca fiind net superior celorlalte, fiecare având propriile neajunsuri. Majoritatea mecanismelor reprezinta adaptari ale mecanismelor clasice, folosite in limbajele de programare ne-orientate obiect.

Extras din referat

Mecanisme de specificare si interactiune a activitatilor concurente în POOC

A. Mecanisme de specificare a concurentei

Vom enumera si analiza în continuare mecanismele de specificare a concurentei în limbajele de programare orientate obiect existente pâna în prezent si vor fi discutate avantajele si dezavantajele fiecaruia dintre acestea. Nici unul dintre aceste mecanisme nu se distinge ca fiind net superior celorlalte, fiecare având propriile neajunsuri. Majoritatea mecanismelor reprezinta adaptari ale mecanismelor clasice, folosite în limbajele de programare ne-orientate obiect.

Paralelizarea automata. Aceasta abordare a paralelismului este una extrema si este caracterizata prin neimplicarea programatorului în activitatea de specificare a concurentei. Programul secvential este preluat si convertit automat într-o "reprezentare paralela". Desi nu reprezinta un mecanism propriu-zis, am luat în considerare paralelizarea automata datorita potrivirii conceptuale perfecte cu programarea orientata pe obiecte. Aceasta potrivire provine din neinterferenta cu caracteristicile limbajului. În acest mod însa nu poate fi obtinut un grad ridicat de performanta, datorita numarului ridicat de dependente între obiecte care compun o aplicatie.

Fork-join, apeluri asincrone/variabile future, post-procesarea. Mecanismele din aceasta categorie sunt folosite pentru lansarea a exact unei activitati concurente la un moment de timp.

Mecanismul fork-join reprezinta prima constructie utilizata în programare pentru specificarea concurentei la nivel de limbaj. El este foarte asemanator cu apelul unei rutine. Rutina apelata este precedata de instructiunea fork si ea se va executa concurent cu rutina care o apeleaza. De obicei, alaturi de instructiunea fork mai este prezenta în limbaj si instructiunea join care este utila la sincronizarea activitatilor concurente (activitatea care executa o instructiune join va fi blocata pâna la terminarea unui proces specificat în instructiune). Dezavantajele acestui mecanism sunt numeroase. Mentionam aici doar lizibilitatea scazuta a codului sursa si dificultatea depanarii si întretinerii aplicatiilor realizate cu acest mecanism. Acest fapt se datoreaza în principal nivelului scazut al instructiunii care poate fi considerata ca o transpunere a instructiunii go to într-un mediu concurent.

Pe de alta parte, într-un context orientat-obiect acest mecanism poate determina distrugerea încapsularii din cel putin doua motive. În primul rând apelatorul unei rutine concurente trebuie sa se asigure ca rutina respectiva poate fi executata în paralel cu restul firelor de executie fara a determina inconsistente ale datelor programului. Daca pastrarea consistentei nu este garantata de catre mecanismul de coordonare a concurentei folosit în limbajul de programare orientat pe obiecte (iar în majoritatea cazurilor aceste mecanisme nu ofera o astfel de garantie), atunci apelatorul trebuie sa cunoasca în detaliu implementarea rutinei apelate. Acest lucru, însa, va reduce dramatic utilitatea bibliotecilor de clase.

În al doilea rând este practic imposibila modificarea codului rutinei fara a analiza cu atentie toate secventele de cod în care aceasta rutina este lansata în paralel. Prin urmare, rescrierea unei rutine poate determina adaugarea de noi conditii în constrângerile de sincronizare de care apelatorul sau trebuie sa tina seama.

Apelurile asincrone de operatii cu variabile future si post-procesarea mostenesc în principal toate aceste dezavantaje. Totusi, în cazul mecanismului de post-procesare (deseori numit si cu retur timpuriu deoarece paralelismul este initiat doar în momentul în care este întâlnita instructiunea return a unei rutine) poate fi impusa o disciplina de programare care sa evite violarea încapsularii. Acest avantaj fragil este secondat însa de o scadere a puterii de descriere a concurentei (nu pot fi modelate anumite scenarii de concurenta între procese).

Cobegin - coend (parbegin - parend). Mecanismele din aceasta categorie permit executia mai multor fire de executie concurente în acelasi timp. Astfel, instructiunile care sunt cuprinse între cuvintele cheie cobegin si coend vor fi lansate concurent în executie. Instructiunea cobegin reprezinta un pas înainte în structurarea programelor concurente în raport cu instructiunea fork, dar spre deosebire de aceasta din urma nu are aceeasi putere de descriere a concurentei.

Pe lânga avantajul unei mai bune structurari a programului acest mecanism determina si o lizibilitate crescuta si usurinta în depanarea programelor. Din pacate, dezavantajul privind distrugerea încapsularii obiectelor amintit si la mecanismul anterior este prezent si în acest caz. Bineînteles, folosirea unor mecanisme potrivite de coordonare a concurentei pot duce la restrângerea cazurilor potentiale de interferente nedorite.

Mecanisme forall, aggregate si mecanisme echivalente. Aceste mecanisme sunt cazuri particulare ale mecanismelor cobegin - coend. Diferenta consta în faptul ca activitatile care sunt executate concurent se refera fiecare la câte un element particular dintr-o anumita structura de date. Dezavantajele semnalate mai sus se pastreaza si în cazul acestor mecanisme, dar riscul aparitiei cazurilor de violare a încapsularii este mai scazut.

Cod autonom. Din aceasta categorie fac parte constructii de limbaj care lanseaza o singura activitate concurenta la un moment dat, cum sunt: procesele, rutinele autonome si rutinele active. Mecanismele prezentate pâna acum reprezinta structuri de control care exprima paralelismul în interiorul unor fragmente de cod secventiale. În cazul proceselor însa se realizeaza o declarare explicita a unui proces asemanator declararii unei rutine obisnuite. Apelarea unui astfel de proces are ca efect executia acestuia în paralel cu celelalte procese existente pâna în momentul respectiv. În functie de limbajul de programare care ofera aceasta constructie, procesele pot fi create static sau dinamic. Diferenta esentiala între procese si celelalte mecanisme de specificare a concurentei este aceea ca procesele nu mai reprezinta simple instructiuni ci sunt concepte de baza al limbajului de programare. De asemenea, activitatile concurente vor avea întotdeauna un nume. Aceste diferente însa nu influenteaza comportamentul mecanismului relativ la conceptele orientate-obiect, astfel ca specificarea concurentei prin intemediul declararii explicite de procese prezinta aceleasi dezavantaje ca si mecanismele prezentate anterior. În plus acest mecanism determina o limitare a puterii de exprimare a concurentei.

Rutinele autonome reprezinta o extensie a declararii proceselor într-un context orientat-obiect. Astfel, în momentul în care un obiect este creat sunt lansate una sau mai multe activitati care executa anumite operatii ale acestuia. Aceste operatii poarta numele de rutine autonome. În functie de limbaj operatiile vor fi lansate automat imediat dupa crearea obiectului sau vor fi necesare apeluri explicite ale acestora. Rutinele autonome sunt prezente mai ales în limbaje de programare care utilizeaza biblioteci de clase speciale pentru exprimarea concurentei. În astfel de limbaje exista o clasa care defineste activitatile care vor fi lansate în paralel, iar ele pot fi reutilizate si/sau rescrise prin intermediul mostenirii.

Preview document

Mecanisme de specificare și interacțiune a activităților concurente în programarea orientată pe obiecte - Pagina 1
Mecanisme de specificare și interacțiune a activităților concurente în programarea orientată pe obiecte - Pagina 2
Mecanisme de specificare și interacțiune a activităților concurente în programarea orientată pe obiecte - Pagina 3
Mecanisme de specificare și interacțiune a activităților concurente în programarea orientată pe obiecte - Pagina 4

Conținut arhivă zip

  • Mecanisme de Specificare si Interactiune a Activitatilor Concurente in Programarea Orientata pe Obiecte.doc

Te-ar putea interesa și

Calcul Paralel

1.Introducere Conceptul clasic a lui Von Neumann despre computerul serial a fost incorporat in primele masini moderne de calcul. Viteza de calcul...

Ai nevoie de altceva?