init - Synchronisation in Doku
This commit is contained in:
parent
7f6b53b549
commit
3cd8ca1d0d
|
@ -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
|
||||
|
||||
|
|
13
README.md
13
README.md
|
@ -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
|
||||
-->
|
||||
|
|
Loading…
Reference in New Issue