Nun diese Abhängigkeiten, insbesondere diese Datenabhängigkeiten, die wir jetzt
betrachtet haben, die zwingen uns hin und wieder, denn dazu eine
Sequenzialisierung der Prozesse durchzuführen. Und das bringt uns dann zu
dem Begriff der Koordinierung der Konkurrenz. Nun, Koordination von
Konkurrenz ist wichtig, wenn wir gleichzeitige Aktionen haben, die sich in
Raum und Zeit überlappen. Und dabei ist dann halt durchaus zu berücksichtigen,
dass wir dann mal davon ausgehen, dass der Moment des Zusammentreffens eben
dieser gleichzeitigen Aktion für gewöhnlich nicht vorherbestimmt ist.
Zudem gehen wir mal davon aus, dass diese Aktionen eben komplex sind, die
bestehen aus mehreren Einzelschritten. Es könnten also Unterprogramme zum
Beispiel sein und es sind nicht nur einfache einzelne Maschinenbefehle. Und die
besondere Eigenschaft ist eben die Teilbarkeit dieser Aktionen in zeitlicher
Hinsicht. Nun wissen wir, dass kausal zusammenhängende Aktionen eben
nacheinander stattfinden müssen. Das kann man offline-mäßig erreichen, zum
Beispiel indem wir eine statische Einplanung vornehmen. Das geht dann gut,
wenn wir alle Daten und Kontrollflussabhängigkeiten kennen und auf
Basis dieser Kenntnis eben in der Lage sind, einen Ablaufplan zu generieren, der
einfach für eine implizite Synchronisation für diese Prozesse sorgt.
Das ist ein strikt analytischer Ansatz, der aber Vorabwissen auf jeden Fall
erfordert. Und wenn wir jetzt den Aspekt betrachten, dass wir nicht davon ausgehen,
dass der Moment des Zusammentreffens dieser gleichzeitig Aktionen bekannt ist,
dann werden wir eigentlich diesen Offline-Weg eigentlich nicht gehen können,
um dann nachher sicherzustellen, dass dann solche Aktionen eben auch
nacheinander stattfinden. Das heißt, wir müssen eine Online-Lösung finden und
das führt uns dann eigentlich immer zur dynamischen Einplanung, wo denn die
Startpunkte für die Prozesse durch Ereignisse repräsentiert werden. Das heißt,
Prozesse werden durch Ereignisse ausgelöst. Das können interne wie auch
externe Ereignisse sein. Hier ist dann explizite Synchronisation in den einzelnen
Programmanweisungen vorzunehmen, damit dann einfach diese Koordination
geschieht. Man nennt das eben auch als konstruktiven Ansatz, weil man dafür
Programmanweisungen wirklich explizit präsentieren muss und durchaus auch
seine Software so entwerfen muss im Vorfeld, dass nachher eine einfache
Synchronisation denn möglich ist. Der große Vorteil dieses Verfahrens ist
eben oder diese Herangehensweise ist eben, dass man hier ohne Vorabwissen
auskommt. Vorabwissen ist immer noch vorteilhaftig zu haben, aber man
braucht dieses Vorabwissen über Prozesse und wann die stattfinden,
eben nicht, um praktisch dann halt hier für eine vernünftige Reihenfolgenbildung
in Bezug auf gleichzeitige Aktionen durchzuführen.
Diese explizite Prozesssynchonisation, die man dann halt macht, kann Streit
hervorbringen und das wird man immer dann haben oder muss man dann damit
rechnen, wenn wir praktisch mehrere gleichzeitig Prozesse halt haben, die
sozusagen ein und dasselbe wiederverwendbare Betriebsmittel mit
benutzen wollen. Also sowas wie Sharing von Datenstrukturen zum Beispiel,
durchführen wollen oder andere Arten von Betriebsmittel oder wir betrachten
konsumierbare Betriebsmittel und dann betrifft sozusagen der Punkt des
Wettstreiks immer genau der Moment der Übergabe des Betriebsmittels von dem
einen Prozess an den anderen Prozess, wenn man so will. Wichtig ist hier, egal wie
man eigentlich synchronisiert, Hauptsache, dass diese Methode, die man verwendet,
eben minimal invasiv für die jeweiligen Prozesse wirkt. Das heißt also die
Prozesse, die denn koordiniert werden, müssen, die sollten nicht zu stark
Presenters
Zugänglich über
Offener Zugang
Dauer
00:24:19 Min
Aufnahmedatum
2020-11-10
Hochgeladen am
2020-11-11 02:57:27
Sprache
de-DE