Comunicare pentru schimbul de mesaje

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , comunicarea pentru schimbul de mesaje (în engleză transmiterea mesajelor) este un tip de comunicare între procese care prevede că nu există resurse partajate (și acest lucru se mai numește nimic împărtășit, nu este partajat) și că toate comunicațiile trebuie să aibă loc prin trimiterea de mesaje între procese. Datorită acestor caracteristici, este în contrast cu tehnicile de comunicare care asigură partajarea memoriei și utilizarea blocărilor sau mecanisme similare pentru a obține excluderea reciprocă . Comunicarea are loc prin primitive de comunicare de tipul trimiterii ( trimiterii ) și primirii ( primirii ).

Modul de schimb de mesaje este utilizat pe scară largă în arhitecturi de înaltă performanță (calcul paralel), iar cel mai popular model în aceste cazuri este MPI .

Tipuri de schimb de mesaje

Schimbul de mesaje poate fi în esență de trei tipuri:

  • comunicare asincronă : expeditorul trimite mesajul și continuă să își desfășoare operațiunile
  • comunicare sincronă : expeditorul trimite mesajul și așteaptă până când receptorul a primit mesajul, a procesat răspunsul și a trimis expeditorului
  • invocare de la distanță : expeditorul așteaptă ca receptorul să fie gata să primească și numai după ce receptorul s-a dat la dispoziție pentru a primi, expeditorul trimite mesajul.

Tipuri de canale de comunicare

Pentru a trimite un mesaj, în mod evident, expeditorul trebuie să specifice cine este destinatarul acestuia. Această acțiune de identificare a destinatarului se numește denumire și poate avea loc în patru moduri diferite:

  • expeditorul trimite mesajul către un destinatar specific identificat prin ID-ul procesului său
  • destinatarul acceptă mesaje de la oricine
  • expeditorul trimite mesajul către o căsuță de e-mail și acesta la rândul său trimite mesajul către destinatar
  • expeditorul trimite datele pe un anumit canal de comunicare și receptorul așteaptă mesaje pe acel canal

Primitive de comunicare

Există doar două primitive de comunicare: una pentru trimiterea unui mesaj ( trimitere ) și cealaltă pentru primirea acestuia ( primire ). Aceștia acționează asupra structurii de date a canalului, care acționează ca un tampon pentru mesaje. Prin urmare, specificația acestor două operații poate fi:

trimite (identificator_de_canal, adresă_mesaj_ către_ trimite )
primi

Într -o vizualizare orientată obiect , s-ar putea spune că obiectul descriptor de canal are două metode, trimitere și primire.

Compilarea trimiterii și primirii

În timp ce programatorul are viziunea unei singure trimiteri și a unei singure recepții, compilatorul are în schimb mai multe versiuni compilate ale primitivelor, fiecare optimizată în funcție de criterii precum:

  • arhitectură: uniprocesor / multiprocesor
  • formă de comunicare simetrică / asimetrică la intrare
  • formă de comunicare sincronă / asincronă
  • canal de comunicare în gardă / nu în gardă
  • ... alte caracteristici ale arhitecturii subiacente

Comunicare asincronă

Comunicarea asincronă este acea comunicare în care expeditorul trimite mesajul și apoi continuă executarea acestuia; asincron înseamnă tocmai asincronicitatea care există între trimiterea unui mesaj și răspunsul la mesajul în sine.

Un exemplu de comunicare asincronă poate fi următorul:

 canalul C (int);

Proces P1 {
   int n;
   ...
   trimite C (n);
   ... 
}

Proces P2 {
   int m;
   ...
   primi C (m);
   ...
}

Procesul P1 trimite pe canalul C valoarea variabilei n și procesul P2 primește pe canalul C valoarea variabilei n și o plasează în variabila m .

Comunicare sincronă

Comunicarea sincronă este acea comunicare în care expeditorul trimite mesajul și așteaptă până când receptorul trimite răspunsul către expeditor.

Un exemplu de comunicare sincronă poate fi următorul:

 canalul C1 (int);
canalul C2 (int);
Proces P1 {
   int n;
   ...
   synchSend C2 (n);
   primiți C1 (n);
   ... 
}

Proces P2 {
   int m;
   ...
   primi C2 (m);
   synchSend C1 (m + 1);
   ...
}

Procesul P1 sincron trimite valoarea variabilei n pe canalul C2 , procesul P2 așteaptă până când primește mesajul și când îl primește, trimite valoarea primită crescută cu 1 pe canalul C1 , procesul P1 așteaptă până când primește o valoare pe canalul C1 , și când îl primește, ambele procese continuă să-și execute codul.

Proprietățile canalului de comunicare:

  • Canalele sunt stabilite automat la trimitere / primire
  • Fiecare canal este asociat cu exact o pereche de procese
  • Există un canal între fiecare pereche de procese de comunicare
  • canalul poate fi unidirecțional, dar este de obicei bidirecțional

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT