init - Synchronisation in Doku

This commit is contained in:
qvalentin 2022-04-10 18:37:33 +02:00
parent 7f6b53b549
commit 3cd8ca1d0d
Signed by: qvalentin
GPG Key ID: C979FA1EAFCABF1C
2 changed files with 15 additions and 1 deletions

3
.gitignore vendored
View File

@ -150,3 +150,6 @@ cython_debug/
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
#
.markdown-preview.html

View File

@ -34,4 +34,15 @@ schon im richtigen Zustand befindet.
## Zeitliche Synchronisation
Um sicherzustellen, dass alle Teilnehmer gleichzeitig den Entwicklungsschritt durchführen und somit der Randaustausch auch
korrekt funktioniert.
korrekt funktioniert, wird eine vereinfachte Version von Lamport Clocks verwendet.
Jeder Prozess hat einen Counter, den er bei jedem Entwicklungsschritt um eins erhöht.
Da für jeden Entwicklungsschritt zuerst die Ränder der benachbarten Teilenehmer abgefragt werden müssen und dies blockieriend geschieht, sind alle Teilnehmer zu jedem Zeitpunkt um maximal 1 bezüglich ihres Counters versetzt.
Damit man jedoch mit seinem Entwicklungsschritt nicht warten muss, bis alle Nachbar den Rand angefragt haben, hält jeder Prozess eine Kopie seine Randes vom vorherigen Zeitpunkt.
Bei der Anfrage nach dem Rand wird der nachgefragte Counter mitgeschickt, dieser muss dem aktuellen oder dem vorherigen Counter entsprechen oder um eins größer sein, als der aktuelle Counter.
Ist der angefragte Counter um eins größer als der aktuelle, liegt also quasi in der Zukunft, wird der Request blockiert, bis der Angefragte den nächsten Entwicklungsschritt durchgeführt hat.
Somit wird das gesamte Game of Life nur so schnell ausgeführt, wie der langsamste Teilenehmer ist.
<!-- LocalWords: Counter
-->