Home » Featured, Programare

Concurenţă, multithreading şi asincronism

1 October 2009 3 Comments

De stăpânit nedeterminismul este imposibil. De realizat concurenţa nu este uşor.

Cowboy Lasso (sursa: http://www.bronze-depot.com) Susţin acest lucru ori de cîte ori am ocazia să vorbesc despre concurenţă. Mai mult decît atît, uneori chiar recomand studenţilor mei să evite utilizarea multiplelor fire de execuţie. Iar în sistemele elaborate de ei doar o reprezentare mai firească a activităţilor concurente în detrimentul eficienţei sau o concurenţă cu „suport” hardware poate justifica utilizarea lor.

Modelul actual de programare multithreading este perceput de unii ca fiind o adaptare a modelului secvenţial sistemelor concurente. Iar realizarea acestui model este de departe cea mai reuşită (shared-state concurrency model). Astfel fără o bună înţelegere a acestuia se poate defecta şi mai mult realizarea sistemului. Aici se adaugă şi faptul că testarea sistemului concurent este greu realizabilă, iar verificarea este deseori chiar imposibilă (din cauza multiplelor stări ale entităţilor concurente: state explosion).

Deci mă justific uşor dacă spun: a programa concurent înseamnă în primul rînd a înţelege fenomenul concurenţei, a cărei definiţie determină „apariţia şi gestiunea evenimentelor simultane la nivelul sistemului de calcul”. „Simultaneitatea” acestor evenimente implică independenţa reciprocă (nu acelaşi lucru pot spune obligator şi de activităţile ce le urmează). Astfel aş putea afirma că aceste „evenimente” se află într-o relaţie asincronă.

Asincronismul explicit sau implicit poate fi în unele cazuri o soluţie alternativă mai bună pentru modelele actuale concurente. Şi este regretabil faptul că unele platforme populare de programare abordează superficial asincronismul. Iar la realizarea asincronismului se face uz doar de mijloace „tradiţionale”… de multithreading.

Asta e şi nu avem ce face… până când.

3 Comments »

  • Andronachi Vadim said:

    Cite greutati si din cauza 'concurentei', dar acest concept eu cred ca este de baza in construirea sistemelor performante :) . Adoptarea modelului secvential pentru sisteme concurente, cred ca este un pas mai usor de a intelege concurenta, dar comportamentul entitatilor secventiale este diferit si chiar in unele cazuri incompatibil cu concurenta.

    Care platforme abordeaza superficial asincronismul :| ?

    PS: Asteptam aparitia unui model concurent care ar acoperi cerintele din zilele noastre !!! ;)

  • Dumitru said:

    Care platforme abordeaza superficial asincronismul ?
    Platformele care nu ofera mecanisme implicite pentru apeluri asincrone, dar pe care le suportă …de facto! :D

  • Andronachi Vadim said:

    Interesant din ce cauza ele nu realizeaza un mecanism explicit pentru apeluri asincrone =/ , cred ca se bazeaza pe realizarile programatorilor B)

  • Chiriliuc Eugen said:

    Acum încep să fiu de acord la 100 cu citatul de la începutul materialului. Doar cînd m-am ciocnit cu realizarea concurenţei, şi în special cu handling-ul erorilor şi interacţiunea firelor paralele, am înţeles că de stăpînit această concurenţă este imposibil.
    Însă totuşi am un simţ că trebuie să existe un instrument, cu ajut căruia s-ar putea, măcar într-o măsură cît de mică, de a "ţine în mîini" rularea unor fire concurente.

  • Andronachi Vadim said:

    Cît de firesc sînt tratate aceste trei notiuni de noul standard la limbajului C++ și anume C++0x pe care și cei de la Microsoft nu rămân în urmă să îl implementeaze în .NET 4.0 :o . De menționat că sînt introduse multe mecanisme și modelele noi, dar politica de interacțiune a proceselor concurente și formarea secțiunilor critice le lasă în seama dezvoltatorilor ;) .

  • Andronachi Vadim said:

    Într-un mod sau altul evoluția științei are să ducă le determinarea modelelor concurente optime și pe înțelesul tuturor ;) .

  • Andronachi Vadim said:

    Concurenţă, multithreading, asincronism, paralelism acestea fiind forme specifice de exprimare a paradigmei concurente. Unul din principiile paradigmelor de programare este, că paradigma determină entitățile de programare (PP:proceduri, POO: obiecte, POA: aspecte ). Paradigma concurentă determină procesele(fire de execuție, asincronism, paralelism) ca fiind noile entităţi. :) Reieșind din aceste aspecte, înțelegerea concurenţei presupune înțelegerea paradigmei acesteia. o.0

    PS: Dacă nu am dreptate aştept reclamații. ;)

  • Stavenschi said:

    Vadim as vrea sa atrag atentia ca ar fi mai bine de subliniat aceste entitati sub paradigma nesecventiala pentru determinarea entitatii "pralelism" ;) , cunoscind faptul ca paradigma de programare nesecventiala este grupata in 3 categorii:
    1.paradigme de programare paralela;
    2.paradigme de programare concurenta;
    3.paradigme de programare distribuita.

    Si dintr-un anumit punct de vedere, fiecare dintre ele include pe cea dinaintea ei. ;)

  • Andronachi Vadim said:

    ” Si dintr-un anumit punct de vedere, fiecare dintre ele include pe cea dinaintea ei.” – Aceasta este prima cale de naștere a unei paradigme noi, ”evoluția”, după cum a menționat D-ul Ș.Marin la o pereche de IPP. ;)
    Cât despre entitatea ”paralelism” cred că nu ai înţeles corect ce am vrut să spun, paradigma de programare concurentă determină ”procesele” ca fiind entitate de construcție a programelor. Fenomenul de concurență evidențiindu-se la momentul de timp când două procese simultan ”luptă” pentru o ”resursă” comună. Prin noţiunea de paralelism subînțeleg ca o metodă de formare a proceselor, aceiași pentru fire de execuţie şi apeluri asincrone determinându-le ca metode. :)
    PS: Entitate în paradigma de programare orientată spre obiecte este clasa :| .

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.