init - Awerbuch Synchronisierer in Doku aufgenommen
This commit is contained in:
parent
1ff5e452bb
commit
7aa83376b1
27
README.md
27
README.md
|
@ -38,11 +38,12 @@ Als dritter Teilnehmer
|
||||||
python -m Code.Main 0.0.0.0 8082 0.0.0.0 8080 LEFT
|
python -m Code.Main 0.0.0.0 8082 0.0.0.0 8080 LEFT
|
||||||
```
|
```
|
||||||
|
|
||||||
### Mit zwei Teilnehmern auf dem lokalen Rechner
|
## Steuerung
|
||||||
|
|
||||||
```shell
|
Es gibt zwei Zustände, pausiert und nicht pausiert.
|
||||||
python -m Code.Main 0.0.0.0 8080 & sleep 2 && python -m Code.Main 0.0.0.0 8081 0.0.0.0 8080 RIGHT
|
Zwischen diesen kann mit 'Leertaste' gewechselt werden.
|
||||||
```
|
Im pausierten Zustand können mit der linken Maustaste eigene Strukturen gezeichnet werden.
|
||||||
|
Mit der unteren Reihe der Tastatur (y,x,v,b,n,m) können vorgefertigte Strukturen (Glider und Spaceships) gespawnt werden.
|
||||||
|
|
||||||
## Einstieg
|
## Einstieg
|
||||||
|
|
||||||
|
@ -79,15 +80,29 @@ schon im richtigen Zustand befindet.
|
||||||
Um sicherzustellen, dass alle Teilnehmer gleichzeitig den Entwicklungsschritt durchführen und somit der Randaustausch auch
|
Um sicherzustellen, dass alle Teilnehmer gleichzeitig den Entwicklungsschritt durchführen und somit der Randaustausch auch
|
||||||
korrekt funktioniert, wird eine vereinfachte Version von Lamport Clocks verwendet.
|
korrekt funktioniert, wird eine vereinfachte Version von Lamport Clocks verwendet.
|
||||||
Jeder Prozess hat einen Counter, den er bei jedem Entwicklungsschritt um eins erhöht.
|
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
|
Da für jeden Entwicklungsschritt (Tick) zuerst die Ränder der benachbarten Teilenehmer abgefragt werden müssen und dies blockierend
|
||||||
geschieht, sind alle Teilnehmer zu jedem Zeitpunkt um maximal 1 bezüglich ihres Counters versetzt.
|
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
|
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.
|
Prozess eine Kopie seiner Ränder vom vorherigen Zeitpunkt.
|
||||||
Bei der Anfrage nach dem Rand wird der nachgefragte Counter mitgeschickt, dieser muss dem aktuellen oder dem vorherigen
|
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.
|
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,
|
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.
|
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.
|
Somit wird das gesamte Game of Life nur so schnell ausgeführt, wie der langsamste Teilenehmer ist.
|
||||||
|
|
||||||
|
Die Synchronisation kann auch als Variante des Awerbuch Synchronisierers angesehen werden.
|
||||||
|
Die Nachrichten über den Randaustausch entsprechen den Nachrichten beim Awerbuch Synchronisier, da sie den Counter/Tick enthalten
|
||||||
|
und blockierend sind, es wird also auf ein ACK gewartet (das wir quasi durch die tiefer liegenden Schichten gemacht).
|
||||||
|
Anstatt jedoch ein Safe zu verschicken, starte jeder Teilnehmer sofort den nächsten Tick und speichert seine Werte vom vorherigen Tick zwischen.
|
||||||
|
Die Option, den Entwicklungsschritt erst durchzuführen, nachdem alle Nachbarn die Kanten angefragt haben, wurde bei der Implementierung erwogen,
|
||||||
|
die Zwischenspeicherung der vorherigen Ränder erschien jedoch komplizierter.
|
||||||
|
|
||||||
|
## TODOS/Probleme
|
||||||
|
|
||||||
|
- [ ] Sauberer Shutdown
|
||||||
|
- [ ] Joinen wenn nicht pausiert
|
||||||
|
- [ ] Zwei Nachbarn als Parameter angeben
|
||||||
|
- [ ] 2D Gebiete
|
||||||
|
|
||||||
<!-- LocalWords: Counter
|
<!-- LocalWords: Counter
|
||||||
-->
|
-->
|
||||||
|
|
Loading…
Reference in a new issue