Programowanie współbieżne i rozproszone/PWR Wykład 3: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mengel (dyskusja | edycje)
Nie podano opisu zmian
 
Mengel (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
== Pojęcie krotki i przestrzeni krotek ==
== Pojęcie krotki i przestrzeni krotek ==
Inne podejście do asynchronicznego modelu komunikacji zaproponował w latach osiemdziesiątych Gelernter. Wprowadził on notację o nazwie ''Linda'', która udostępnia tzw. ''przestrzeń krotek'', czyli coś w rodzaju nieskończonego bufora, za pomocą którego porozumiewają się ze sobą procesy. Jest jedna wielka, globalna przestrzeń krotek. Procesy porozumiewają się ze sobą umieszczając w przestrzeni krotek komunikaty i pobierając je z niej. Procesy nie muszą wiedzieć nic o sobie nawzajem, więcej mogą nie istnieć w tym samym czasie. Nadawca może odebrać komunikat od procesu, który już dawno zakończył swoje działanie.


Każdy komunikat przesyłany przez procesy to tzw. ''krotka''.
; Krotka
: to ciąg (skończony), którego kolejnymi elementami są dane o określonych typach.
Przykładami krotek są:
* jednokrotki: (4), (3.14), ("żeton")
* pary: ('c', true), (5, 123)
* dłuższe krotki: (6, 'c', 3.14, "dane")
Każda krotka ma statycznie określoną długość. Nie może tworzyć krotek o dynamicznie zmienianej bądź wyliczanej długości. Typy poszczególnych elementów krotki mogą być dowolne typy proste lub typy złożone (tablice, rekordy). Nie ma jednak typu, którego wartościami byłyby krotki, więc krotka nie może być elementem krotki.
; Sygnatura krotki
: to ciąg, którego elementami są typy poszczególnych elementów krotki.
Sygnaturą krotki ('c', true, 3.14, "żeton") jest na przykład (char, boolean, real, string).
W niektórych operacjach na przestrzeni krotek wymaga się podania sygnatury krotki.


== Proste operacje na przestrzeni krotek ==
== Proste operacje na przestrzeni krotek ==
Linda nie jest tak naprawdę językiem programowania, ale raczej czymś w rodzaju biblioteki oferującej pewne operacje na przestrzeni krotek. Są to:
* Operacja wstawienia krotki <tt>t</tt> do przestrzeni krotek:
: <tt>Output(t)</tt>
* Operacje odczytywania i obierania krotki o sygnaturze <tt>s</tt>:
: <tt>Input (s)</tt> oraz <tt>Read (s)</tt>
* Nieblokujące wersje powyższych operacji w postaci funkcji logicznych:
: <tt>Try_Input (s)</tt> oraz <tt>Try_Read (s)</tt>
Omówimy teraz po kolei powyższe operacji.


=== Wstawianie krotki ===
=== Wstawianie krotki ===
Ponieważ Linda jest rozproszonym mechanizmem asynchronicznym z nieograniczonym buforem, więc operacja wstawiania krotki do przestrzeni jest operacją nieblokującą. 


=== Wyjmowanie krotki ===
=== Wyjmowanie krotki ===

Wersja z 16:04, 17 cze 2006

Pojęcie krotki i przestrzeni krotek

Inne podejście do asynchronicznego modelu komunikacji zaproponował w latach osiemdziesiątych Gelernter. Wprowadził on notację o nazwie Linda, która udostępnia tzw. przestrzeń krotek, czyli coś w rodzaju nieskończonego bufora, za pomocą którego porozumiewają się ze sobą procesy. Jest jedna wielka, globalna przestrzeń krotek. Procesy porozumiewają się ze sobą umieszczając w przestrzeni krotek komunikaty i pobierając je z niej. Procesy nie muszą wiedzieć nic o sobie nawzajem, więcej mogą nie istnieć w tym samym czasie. Nadawca może odebrać komunikat od procesu, który już dawno zakończył swoje działanie.

Każdy komunikat przesyłany przez procesy to tzw. krotka.

Krotka
to ciąg (skończony), którego kolejnymi elementami są dane o określonych typach.

Przykładami krotek są:

  • jednokrotki: (4), (3.14), ("żeton")
  • pary: ('c', true), (5, 123)
  • dłuższe krotki: (6, 'c', 3.14, "dane")

Każda krotka ma statycznie określoną długość. Nie może tworzyć krotek o dynamicznie zmienianej bądź wyliczanej długości. Typy poszczególnych elementów krotki mogą być dowolne typy proste lub typy złożone (tablice, rekordy). Nie ma jednak typu, którego wartościami byłyby krotki, więc krotka nie może być elementem krotki.

Sygnatura krotki
to ciąg, którego elementami są typy poszczególnych elementów krotki.

Sygnaturą krotki ('c', true, 3.14, "żeton") jest na przykład (char, boolean, real, string). W niektórych operacjach na przestrzeni krotek wymaga się podania sygnatury krotki.

Proste operacje na przestrzeni krotek

Linda nie jest tak naprawdę językiem programowania, ale raczej czymś w rodzaju biblioteki oferującej pewne operacje na przestrzeni krotek. Są to:

  • Operacja wstawienia krotki t do przestrzeni krotek:
Output(t)
  • Operacje odczytywania i obierania krotki o sygnaturze s:
Input (s) oraz Read (s)
  • Nieblokujące wersje powyższych operacji w postaci funkcji logicznych:
Try_Input (s) oraz Try_Read (s)

Omówimy teraz po kolei powyższe operacji.

Wstawianie krotki

Ponieważ Linda jest rozproszonym mechanizmem asynchronicznym z nieograniczonym buforem, więc operacja wstawiania krotki do przestrzeni jest operacją nieblokującą.

Wyjmowanie krotki

Odczytywanie krotki

Wersje nieblokujące

Wybór selektywny

Krotki dziurawe

Przykłady

Realizacja komunikacji między procesami za pomocą przestrzeni krotek

Czytelnicy i pisarze. Wersja 1.

Czytelnicy i pisarze. Wersja 2.

Czytelnicy i pisarze. Wersja 3.