Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Blockierend vs. Nichtblockierende Mehoden
Blockierende Methoden halten die Programmausführung an, bis sie vollständig abgeschlossen sind – während dieser Zeit werden keine anderen Aufgaben bearbeitet. Nicht blockierende Methoden hingegen ermöglichen es, mehrere Prozesse quasi gleichzeitig auszuführen, da sie den Ablauf nicht vollständig unterbrechen, sondern Aufgaben asynchron abarbeiten, beispielsweise durch zeitgesteuerte Überprüfungen.
Problemstellung: Blockierende vs. Nicht-blockierende Steuerung
Ein mBot soll vorwärts fahren und gleichzeitig eine LED blinken lassen. Zusätzlich soll er anhalten, wenn er ein Hindernis erkennt (unter 15 cm Abstand).
Blockierende Umsetzung
In einer blockierenden Umsetzung wird delay()
zum Blinken verwendet. Während der Wartezeit kann der mBot keine neuen Sensordaten auslesen. Dadurch kann er erst nach Ablauf der Verzögerung auf ein Hindernis reagieren, was zu einem verspäteten Anhalten führt.
Nicht-blockierende Umsetzung
In einer nicht-blockierenden Umsetzung wird die LED mit millis()
gesteuert. Dadurch kann der mBot kontinuierlich Sensordaten auslesen und sofort stoppen, wenn er ein Hindernis erkennt, während die LED unabhängig weiterblinkt.
Vergleich und Vorteile der nicht-blockierenden Methode
- ✅ Schnellere Reaktionszeit: Der Sensor wird ohne Unterbrechung geprüft.
- ✅ Parallele Abläufe: Der mBot kann gleichzeitig fahren, blinken und auf Hindernisse reagieren.
- ✅ Effizienter Code: Keine Verzögerung durch blockierende Wartezeiten.
➡ Ziel: Die nicht-blockierende Variante ermöglicht eine bessere Steuerung des mBots, da sie Sensorabfragen und Motorsteuerung kontinuierlich ausführt.
Vergleich und Vorteile der nicht-blockierenden Methode
Die nicht-blockierende Methode ermöglicht eine effizientere Steuerung des mBots, da Abläufe parallel ausgeführt werden können. Dadurch ergeben sich folgende Vorteile:
✅ Schnellere Reaktionszeit: Der Sensor wird kontinuierlich geprüft, sodass der mBot Hindernisse sofort erkennt und rechtzeitig anhalten kann, ohne durch Wartezeiten verzögert zu werden.
✅ Parallele Abläufe: Der mBot kann gleichzeitig fahren, blinken und Hindernisse erkennen, da keine Aufgabe den Programmfluss blockiert. Dadurch reagiert das System dynamischer auf Veränderungen in der Umgebung.
✅ Effiziente Nutzung der Prozessorzeit: Anstatt auf eine feste Wartezeit zu warten, werden Aufgaben zeitgesteuert verarbeitet. So bleibt das System jederzeit aktiv und reaktionsfähig.
⚠ Etwas komplexere Umsetzung: Die nicht-blockierende Methode erfordert eine andere Programmstruktur mit Zeitsteuerung durch millis()
. Dies macht sie etwas anspruchsvoller als die einfache delay()
-Methode.
➡ Wann ist welche Methode sinnvoll?
Die blockierende Methode (mit delay()
) ist in einfachen Anwendungen oft ausreichend, da sie leichter zu verstehen und umzusetzen ist. Sobald jedoch mehrere Prozesse gleichzeitig ablaufen sollen oder schnelle Reaktionen erforderlich sind, ist die nicht-blockierende Methode die bessere Wahl.
Vor- und Nachteile blockierender und nicht-blockierender Methoden
Die nicht-blockierende Methode ermöglicht eine effizientere Steuerung des mBots, da Abläufe parallel ausgeführt werden können. Gleichzeitig ist die blockierende Methode einfacher umzusetzen und kann in manchen Fällen ausreichen.
Vorteile der nicht-blockierenden Methode
✅ Schnellere Reaktionszeit: Der Sensor wird kontinuierlich geprüft, sodass der mBot Hindernisse sofort erkennt und rechtzeitig anhalten kann, ohne durch Wartezeiten verzögert zu werden.
✅ Parallele Abläufe: Der mBot kann gleichzeitig fahren, blinken und Hindernisse erkennen, da keine Aufgabe den Programmfluss blockiert. Dadurch reagiert das System dynamischer auf Veränderungen in der Umgebung.
✅ Effiziente Nutzung der Prozessorzeit: Anstatt auf eine feste Wartezeit zu warten, werden Aufgaben zeitgesteuert verarbeitet. So bleibt das System jederzeit aktiv und reaktionsfähig.
Vorteile der blockierenden Methode
✅ Einfache Umsetzung: Der Code ist leicht zu schreiben und zu verstehen, da Abläufe nacheinander ausgeführt werden, ohne komplexe Zeitsteuerung.
✅ In einfachen Anwendungen ausreichend: Wenn keine parallelen Abläufe oder schnelle Reaktionen erforderlich sind, kann die blockierende Methode eine pragmatische Lösung sein.
Nachteile der Methoden
⚠ Blockierend: Verzögerungen durch Wartezeiten, keine parallelen Abläufe möglich.
⚠ Nicht-blockierend: Erfordert eine etwas komplexere Programmstruktur mit Zeitsteuerung durch millis()
.
➡ Wann ist welche Methode sinnvoll? Die blockierende Methode ist für einfache Abläufe gut geeignet, während die nicht-blockierende Methode notwendig wird, wenn mehrere Prozesse gleichzeitig laufen oder schnelle Reaktionen erforderlich sind.