init - Awerbuch Synchronisierer in Doku aufgenommen
This commit is contained in:
		
							parent
							
								
									1ff5e452bb
								
							
						
					
					
						commit
						7aa83376b1
					
				
					 1 changed files with 21 additions and 6 deletions
				
			
		
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue