Verteilte und Parallele Programmierung

Mit Virtuellen Maschinen

PD Stefan Bosse

Universität Bremen - FB Mathematik und Informatik

1 / 49

PD Stefan Bosse - VPP - Parallele Programmierung ::

Parallele Programmierung

Grundlagen der parallelen Programmierung

Unterscheidung zwischen Parallelisierung im Daten- und Kontrollfluss von Programmen

Prozessmodelle und Prozesskonstruktoren

2 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

Datenfluss
Der Datenfluss beschreibt den Fluss von Daten durch Verarbeitungs- und Speichereinheiten (Register).

Die Verarbeitungseinheiten sind Knoten eines gerichteten Graphens, die Kanten beschreiben den Datenfluss und bilden die Datenpfade. Die Verarbeitungseinheiten müssen aktiviert werden.

Kontrollfluss
Der Kontrollfluss beschreibt die temporale schrittweise Verarbeitung von Daten im Datenpfad durch zustandsbasierte selektive Aktivierung von Verarbeitungseinheiten.

Der Kontrollfluss kann durch Zustandsübergangsdiagramme beschrieben werden.

3 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

Programmfluss
Der Programmfluss setzt sich kombiniert aus Daten- und Kontrollfluss zusammen.
4 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

  • Programmanweisungen werden Zuständen S1,S2,.. zugeordnet.

  • Einfache Anweisungen (Berechnungen) werden jeweils einem Zustand, komplexe Anweisungen i.A. mehreren Unterzuständen zugeordnet.

Programm-, Kontroll-, und Datenflussgraphen

5 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

Datenparallelität

In vielen Programmen werden dieselben Operationen auf unterschiedliche Elemente einer Datenstruktur angewendet. Im einfachsten Fall sind dies die Elemente eines Feldes.

  • Wenn die angewendeten Operationen unabhängig voneinander sind, kann diese verfügbare Parallelität dadurch ausgenutzt werden, um die zu manipulierenden Elemente der Datenstruktur auf verschiedene Prozessoren zu verteilen, so dass jeder Prozessor die Operation auf den ihm zugeordneten Elementen ausführt.

  • Parallelität im Datenpfad → Feine Granularität

6 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

  • Bei der Datenparallelität wird unterschieden zwischen:

    • Parallele Ausführung der gleichen Instruktion auf verschiedenen Daten (Vektorparallelität) → Vektoranweisung

    • Ausführung verschiedener Instruktionen die nur Daten verarbeiten (reine Datenanweisungen, keine Kontrollpfadverzweigungen)

7 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

  • Zur Ausnutzung der Datenparallelität wurden sequenzielle Programmiersprachen zu datenparallelen Programmiersprachen erweitert. Diese verwenden wie sequenzielle Programmiersprachen einen Kontrollfluß, der aber auch datenparallele Operationen ausführen kann.

    • Z.B. μRTL: Bindung von mehreren Datenpfadanweisungen durch Kommasyntax: x ← ε , y ← ε , .. , z ← ε ;
  • Häufig werden Vektoranweisungen deklarativ und nicht prozedural imperativ beschrieben.

8 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

  • Beispiel für eine deklarative Vektoranweisung und die dazugehörige imperative Anweisungssequenz in Schleifenform (Fortran 90):
a(1 : n) = b(0 : n − 1) + c(1 : n) ⇔
for (i=1:n)
a(i) = b(i-1) + c(i)
end
9 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

  • Datenabhängigkeiten können zwischen der linken und rechten Seite einer Datenzuweisung bestehen, so dass

    • zuerst auf alle auf der rechten Seite auftretenden Felder zugegriffen wird und die auf der rechten Seite spezifizierten Berechnungen durchgeführt werden,
    • bevor die Zuweisung an das Feld auf der linken Seite der Vektoranweisung erfolgt!
  • Daher ist folgende Vektoranweisung nicht in die folgende Schleife sequenziell transformierbar:

a(1 : n) = a(0 : n − 1) + a(2 : n + 1) ≠
for (i=1:n)
a(i) = a(i-1) + a(i+1)
end
10 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

Datenparallelität benötigt i.A. keine weitere Synchronisation

Aber Datenabhängigkeiten können zu einer impliziten oder expliziten Synchronisation führen (z.B. mit Queues)

Durch die Verwendung von Queues (oder allg. Kommunikationskanälen) werden Datenabhängigkeiten über einen Blockierungsmechanismus (Verzögerung) aufgelöst. Es gibt Produzenten und Konsumenten. Der Konsument wird solange blockiert bis der Produzent (i.a. der vorherige Prozess) Daten liefert. Umgekehrt kann ein Produzent verzögert werden wenn ein Konsument noch nicht zur Aufnahme neuer Daten bereit ist.

P1Q1P2Q2P3Q(t):t{dDQ

11 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

Instruktionsparallelität

  • Parallelität im Kontrollpfad (Zustandsautomat) auf Instruktions- und Prozessebene → Grobe Granularität je nach Anzahl der Instruktionen pro Prozess (Task)

  • Gebundene Instruktionsblöcke sind Parallelprozesse (Par Prozesskonstruktor)

  • Bekannt als Multithreading als Programmier- und Ausführungsmodell (z.B. pthreads)

  • Instruktionsparallelität benötigt i.A. Synchronisation zwischen den einzelnen Prozessen

12 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallelisierungsklassen

Parallelisierungsklassen

Möglichkeiten der Parallelisierung

  1. Vertikale Parallelität auf Bitebene (jegliche funktionale Operation)
  2. Horizontale Parallelität durch Pipelining (nur Datenströme)
  3. Parallelität durch mehrere Funktionseinheiten:
    • Superskalare Prozessoren
    • Very Large Instruction Word (VLIW) Prozessoren
  4. Funktionsparallelität (Evaluierung der Funktionsargumente und Rekursion)
  5. Vertikale Parallelität auf Prozess- bzw. Threadebene (Kontrollpfadebene)
13 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Fluss und Pfadgraphen

Fluss und Pfadgraphen

  • Ein Datenfluss (Graph aus Operationen oder Variablen) beschreibt den Verlauf und die Verarbeitung von Daten durch Operationen → Verhaltensbeschreibung
  • Ein Datenpfad beschreibt die Verbindung von Komponenten zur Implementierung des Datenflusses → Strukturbeschreibung

  • Der Kontrollfluss beschreibt die zustandsbasierte Steuerung einer Berechnung

    • Bedingte (↔ Datenfluss) Verzweigungen im Kontrollfluss
    • Schleifen im Kontrollfluss
  • Der Kontrollpfad implementiert den Kontrollfluss → Zustandsautomat
14 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Daten- und Kontrollpfade

Daten- und Kontrollpfade

Jeder generische Mikroprozessor und i.A. jedes anwendungsspezifische Digitallogiksystem lässt sich in die zwei funktionale Bereiche aufteilen:

  1. Datenfluss → Datenpfade
  2. Kontrollfluss → Kontrollpfad → Zustandsautomat

Datenpfad

  • Führt Berechnungen durch
  • Kann rein funktional (speicherlos, kombinatorisch) oder speicherbasiert mir Register-Transfer Architektur sein
15 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Daten- und Kontrollpfade

Daten- und Kontrollpfade

Kontrollpfad

  • Der Kontrollpfad ist immer zustandsbasiert (Speicher) und bestimmt die Reihenfolge von Operationen und Berechnungen
16 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Daten- und Kontrollpfade

Daten- und Kontrollpfade

Parallelisierung

Der Programmfluss kann in Daten- und Kontrollfluss zerlegt werden, die jeweils im Daten- und Kontrollpfad eines Datenverarbeitungssystems verarbeitet werden.

Kontrollpfad
Parallelität auf Prozessebene (Multithreading) mit Interprozesskommunikation → Mittlere bis geringe Beschleunigung, mittlerer Overhead
Datenpfad
Parallelität auf Dateninstruktionsebene ohne explizite Kommunikation → Hohe Beschleunigung, geringer Overhead
17 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Daten- und Kontrollpfade

Daten- und Kontrollpfade

Programm

  • Ein (prozedurales/imperatives) Programm besteht aus mindestens einem Daten- und Kontrollpfad (oder Fluss)

  • Ein Programm ist aus einer Vielzahl von Komponenten zusammengesetzt → Komposition

  • Komposition von Datenfluss und Datenpfad:

    • Funktionale Komposition
    • (Sequenzielle Komposition)
    • Parallele Komposition
18 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Daten- und Kontrollpfade

Daten- und Kontrollpfade

  • Komposition von Daten- und Kontrollfluss/pfad:
    • Sequenzielle Komposition
    • Parallele Komposition
19 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Funktionale Programmierung

Funktionale Programmierung

Funktionale Programmierung beschreibt grundlegend den Datenpfad. Es gibt keinen Zustand und keinen expliziten Kontrollfluss.

20 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Funktionale Komposition

Funktionale Komposition

Eine Berechnung setzt sich aus der verschachtelten und verketteten Applikation von Funktionen zusammen, die jeweils aus elementaren Ausdrücken E={ε12,..} bestehen → Funktionale Komposition F(X)=f1(f2(f3..(X)))

  • Jede Funktion fi beschreibt einen Teil der Berechnung.
21 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Funktionale Komposition

Funktionale Komposition

  • Ausdrücke bestehen aus:
  1. Konstante und variable Werte 1,2.0,'c',"hello",x,y,z
  2. Einfache arithmetische Ausdrücke ε=x+y
  3. Zusammengesetzte Ausdrücke (arithmetische Komposition) ε=(x+1)*(y-1)*z
  1. Relationale Ausdrücke x < 0
  2. Boolesche Ausdrücke a and b or c
  3. Bedingte Ausdrücke liefern Werte if x < 0 then x+1 else x-1
  4. Funktionsapplikation f(x,y,z)
22 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Funktionale Komposition

Funktionale Komposition

  • Entspricht dem mathematischen Modell was auf Funktionen und Ausdrücken gründet mit den Methoden

    • Definition f(x) = λ.x → ε(x)
    • Applikation f(ε), bei mehreren Funktionsargumenten f12,..)
    • Komposition f ∘ g ∘ h ∘ .. = f(g(h(..(x)))
    • Rekursion f(x) = λ.x → ε(f,x)
    • und Substitution a=ε
  • Zeitliches Modell: unbestimmt (t ↦ 0), Auswertereihenfolge nicht festgelegt

23 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Funktionale Komposition

Funktionale Komposition

Beispiel für Funktionsdefinition und Applikation

24 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Funktionale Komposition von Systemen

Funktionale Komposition von Systemen

Parallelisierung durch Modellierung unterschiedlich detaillierter Datenflussdiagramme, die untereinander einen hierarchischen Zusammenhang aufweisen.

(Links) Datenflüsse von Ein- und Ausgabegeräten EA eines Systems (Rechts) Komposition des Systems durch Funktionen mit inneren Datenflüssen (teils parallelisierbar)
25 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzielle Komposition

Sequenzielle Komposition

Eine imperative Berechnung setzt sich aus einer Sequenz I=(i1 , i2 , ..) von elementaren Anweisungen A={a1,a2,..} zusammen →
Sequenzielle Komposition i1 ; i2 ; ...

  • Die Anweisungen werden sequentiell in exakt der angegebenen Reihenfolge ausgeführt
26 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzielle Komposition

  • Die Menge der Anweisungen A lässt sich in folgende Klassen unterteilen:
  1. Arithmetische, relationale, und boolesche Ausdrücke (in Verbindung mit 2./3.) x+1, a*(b-c)*3, x<(a+b), ...
  2. Datenanweisungen: Wertzuweisungen an Variablen x := a+b
  3. Kontrollanweisungen wie bedingte Verzweigungen und Sprünge (Schleifen)
if a < b then x := 0 end
while x < 100 do x:=x+1 end
27 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzielle Komposition

Sequenzielle Komposition

  • Man fasst die Sequenz I als ein imperatives Programm X == Ausführungsvorschrift zusammen.

  • Die Ausführung des Programms (statisch) bezeichnet man als Prozess (dynamisch)

  • Ein Prozess befindet sich aktuell immer in einem Zustand σ einer endlichen Menge von Zuständen Σ={σ1 , σ2 , ..}.

  • Der gesamte Zustandsraum Σ des Prozesses setzt sich aus dem

    • Kontrollzustand sS={s1, s2, ..}, und dem
    • Datenzustand mit der Menge aller Speicherzustände (Daten) dD={d1, d2, ..} zusammen.
28 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzielle Komposition

Sequenzielle Komposition

  • Der Fortschritt eines sequenziellen Programms bedeutet ein Änderung des Kontroll- und Datenzustandes → Zustandsübergänge

  • Die Zustandsübergänge können durch ein Zustandsübergangsdiagramm dargestellt werden.

29 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Das Prozessmodell

Das Prozessmodell

Es werden zwei Prozesstypen unterschieden:

Sequenzieller Prozess
Ein einziger Programm- und Kontrollfluss mit strikter sequenzieller Ausführung von Anweisungen
Paralleler Prozess
Es gibt zwei oder mehr parallel ausgeführte Programm- und Kontrollflüsse (Ausführung kann zeitlich überlappend sein, muss aber nicht → Scheduling)
30 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

Sequenzieller Prozess

Ausführungszustände

  • Ein Prozess P besitzt einen "makroskopischen" Metaausführungszustand ps. Die Basismenge der Ausführungszustände PS ist ("Milestones"):
    • Start/Bereit aber noch nicht rechnend (START)
    • Rechnend (RUN)
    • Terminiert und nicht mehr rechnend (END)
  • Dazu kann es eine erweiterte Menge PS*an Metaausführungszuständen geben:
    • Auf ein Ereignis wartend (AWAIT)
    • Blockiert (BLOCKED)
    • Rechenbereit aber nicht rechnend (nach Ereignis) (READY)
31 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

PS={START,RUN,END}PS={AWAIT,BLOCKED,READY}ps(P)PSPS

  • Befindet sich der Prozess im Ausführungszustand RUN (also ausführend), dann werden strikt sequenziell die Instruktionen des Programms I={i1,i2,..,in} ausgeführt.

  • Dabei ist jede Instruktion eine Anweisung aus der endlichen Anweisungsmenge A={a1,..} der Maschine (z.B. Bytecode Anweisung add(x,y)).

  • Ein Wechsel des Ausführungszustandes führt nicht zu einer Änderung der Instruktionsreihenfolge.

32 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess: Zeitliches Modell

Sequenzieller Prozess: Zeitliches Modell

  • Ein Prozess führt die Anweisungen der Reihe nach aus. Das symbolische Semikolon teilt den Anweisungen eigene Ausführungsschritte (Zeitpunkte ti) zu.

i1:t1i2:t2i3:t3..in:tn mitt1<t2<t3<..<tnT=ititi1 

  • Die gesamte Ausführungszeit T(p) eines sequenziellen Prozesses p ist die Summe der Ausführungszeiten der Elementarprozesse
33 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

Sequenzieller Prozess

Prozessblockierung

  • Das Konzept der Prozessblockierung ist elementar für kommunizierende Prozesse

  • Kommunikation: Lesen und Schreiben von Daten, Ein- und Ausgabe, Netzwerknachrichten, usw.

  • Befindet sich ein Prozess im Ausführungszustand BLOCKED wartet dieser auf ein Ereignis:

    • Daten sind verfügbar
    • Zeitüberschreitung
    • Geteilte Ressource ist frei
    • Synchronisation mit anderen Prozessen
34 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

Sequenzieller Prozess

  • Bei einem blockierten Prozess schreitet der Kontrollfluss nicht weiter voran (keine Terminierung der aktuellen Operation)
  • Die Ausführung einer Operation (Instruktion) kann verzögert werden bis das zu erwartende Ereignis eintritt

Das Ausführungsmodell von Lua unterstützt die Blockierung des Programmflusses

Koroutinen

  • In Koroutinen (Fiber) z.B. mittels der yield Anweisung
  • Der Programmfluss wird über einen Scheduler an eine andere Koroutine übergeben
  • Schließlich wird die Programmausführung der ursprünglichen Koroutine nach der yield Anweisung wieder fortgesetzt (durch resume Anweisung)
35 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

Sequenzieller Prozess

  • Ebenso auch bei Ein- und Ausgabeoperationen (IO: read, write)
  • In Threads ebenfalls via yield und IO Operationen
    • Aber hier findet das Scheduling außerhalb der VM statt (multiple VM Instanzen)
Symmetrische Koroutinen
Das Scheduling der Koroutinen erfolgt semiautomtisch und es gibt nur die yield Operation (Reaktivierung von Koroutinen implizit durch Scheduler).
Asymmetrische Koroutinen
Die Suspendierung und Reaktivierung von Koroutinen erfolgt explizit (yield und resume Operationen).
36 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

Sequenzieller Prozess

Tatsächlich gibt es in Lua auf programmatischer Ebene aber nur einen einzigen Kontrollfluss und Pfad (eine VM Instanz)!

┌─────────┐ ┌─────────┐
│ │ resume │ │
│ 1 │ ┌────▶│ 4 │
│ 2 │ │ │ 5 │
│ 3 yield ├───┐ │ ┌───┤ 6 yield │
│ 7 │ │ │ │ │ 9 │
│ 8 read ├─┐ │ │ │ │ │
│ │ │ │ │ │ │ │
└────┬────┘ │ │ │ │ └────┬────┘
│ ▼ ▼ │ ▼ │
┌────┴───────────┴──────────┴───────────┐
│ LUA VM Instanz │
└───────────────────────────────────────┘
Zwei Koroutinen im Wechsel; eine VM Instanz
37 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

Sequenzieller Prozess

co1 = coroutine.create(function ()
for i=1,10 do
print("co1", i)
coroutine.yield()
end
end)
co2 = coroutine.create(function ()
for i=1,10 do
print("co2", i)
coroutine.yield()
end
end)
coroutine.resume(co1)
coroutine.resume(co2)
...
38 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Sequenzieller Prozess

39 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallele Prozesse

Parallele Prozesse

Ausgangspunkt sind sequenzielle Prozesse

Ein sequenzieller Prozess Ps besteht aus einer Sequenz von Anweisungen I=(i1 ; i2 ;..) (Berechnungen), die schrittweise und nacheinander ausgeführt werden: Ps=P(i1 ; i2 ; .. ; in) ⇒ p1p2 ↦ .. ↦ pn

40 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallele Komposition

Parallele Komposition

Datenverarbeitungssystem als paralleler Prozess kann aus einer Vielzahl nebenläufig ausgeführter Prozesse P={P1, P2, P3,...} bestehen

Parallele Komposition P=P1P2P3 ∥ ..

41 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Paralleler Prozess

Paralleler Prozess

Prozesskonstruktor

P=(P1P2..Pn)PARi1i2..in 

Lua

Par({
function (pid) .. end,
function (pid) .. end,..
},{
-- shared environment
v = ε, ..
})
42 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Paralleler Prozess

Paralleler Prozess

Ausführungsreihenfolge

  • Achtung! Wenn keine Kommunikation (Synchronisation) zwischen den Prozessen stattfindet ist die Ausführung und das Endergebnis (der Berechnung) gleich der sequenziellen Ausführung der Prozesse:

P1P2..PnP1;P2;..;PnP1P2P1;P2P2;P1! 

43 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Paralleler Prozess: Zeitliches Modell

Paralleler Prozess: Zeitliches Modell

P=P1P2..PnP1=(i1,1:t1,1;i1,2,:t1,2;..)Pn=(in,1:tn,1;in,2:tn,1;..), mitti,1<ti,2<..<ti,mProzess mit m Instr. und t(P)=[t1,t2]=[t1,1,t1,q][t2,1,t2,r]..[tn,1,tn,s]t1=min{t1,1,t2,1,..,tn,1}t2=max{t1,q,t2,r,..,tn,s} T=t2t1

44 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Prozessflussdiagramme

Prozessflussdiagramme

  • Der Prozessfluss in einem parallelen System kann durch Übergangs- und Terminierungsdiagramme dargestellt werden. (wie bereits im seq. Fall gezeigt wurde).
  • Eingehende Kanten (Pfeile) des Graphen beschreiben den Start eines Prozesses, ausgehende Kanten die Terminierung.

Beispiel eines Prozessflussdiagramms für vier Prozesse. P1 startet P3, und P2 spaltet P4 ab. (mit P_,i = Instruktion(P,i))

45 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Paralleler Prozess

Paralleler Prozess

Prozesserzeugung und Synchronisation

  • Ein neuer paralleler Prozess kann durch den entsprechenden Prozesskonstruktor erzeugt werden

  • Geschieht dies innerhalb eines Prozesses Pi so wird dessen Prozessausführung blockiert bis alle Teilprozesses des parallelen Prozessen terminiert sind!

46 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Paralleler Prozess

Forking

  • Ein neuer Prozess Pj kann mittels Forking erzeugt werden (Aufspaltung des Kontrollflusses, so auch von einem anderen Prozess Pi) ohne dass ein ausführender Prozess auf die Terminierung des Parallelprozesses warten muss:

P1;//P2;P3=P1;P3P2//P1;//P2;P3=P1P2P3 

Lua

Fork({
function (pid) .. end,
function (pid) .. end, ..
},{
-- shared environment
})
47 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Parallele Prozesse in Lua

Parallele Prozesse in Lua

48 / 49

PD Stefan Bosse - VPP - Parallele Programmierung :: Zusammenfassung

Zusammenfassung

Parallele Prozesse werden aus nebenläufig oder verwoben ausgeführten sequenziellen Prozessen gebildet

Prozesse besitzen drei wesentliche Ausführungszustände: Bereit, Rechnend, Terminiert

Prozessynchonisation kann durch Prozessflussgraphen (PFG) dargestellt werden

Ein nachfolgender Prozess (Knoten im PFG) wird erst gestartet wenn der vorherige terminiert

Prozessblockierung ist wesentliche Eigenschaft von synchronisierenden Prozessen

49 / 49