Aktives Warten
aus Wikipedia, der freien Enzyklopädie
Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit, ihn zu verbessern, und entferne anschließend diese Markierung. |
Aktives Warten oder Busy Waiting ist eine Programmiertechnik um einen Prozess (bzw. einen Thread) auf das Eintreten einer Bedingung warten zu lassen. Dabei läuft der Prozess so lange „im Kreis“, bis die Bedingung erfüllt ist. Diese Technik wird vor allem für Spinlocks verwendet. Ein Beispiel in Pseudocode:
Funktion warte_bis (Parameter bedingung ) { solange (nicht bedingung) { } // läuft im Kreis bis die Bedingung erfüllt ist. }
Das hat den großen Nachteil, dass der Prozess die volle Rechenleistung des Systems damit beansprucht, immer wieder die Bedingung zu Prüfen, und damit andere Prozesse ausbremst. Das ist vor allem auch deshalb nachteilig, weil es ja gerade die anderen Prozesse sind, die dafür sorgen müssen, dass die Bedingung erfüllt wird.
Etwas besser wird die Situation, wenn das Betriebssystem (bzw. die Laufzeitumgebung) die Möglichkeit bietet, einen Prozess für eine vorgegebene Zeit „schlafen“ zu lassen. Diese Methode wird auch als slow busy waiting oder lazy polling bezeichnet. Dann lässt sich die Funktion so umsetzen:
Funktion warte_bis (Parameter bedingung) { solange (nicht bedingung) { schlafe(1 Sekunde); } // prüft die Bedingung einmal pro Sekunde }
Der Nachteil ist aber, dass hier häufig länger gewartet wird als nötig wäre (nämlich bis zu einer Sekunde länger), weil die Bedingung erst wieder geprüft wird, wenn die „Schlafzeit“ abgelaufen ist. Auch wird zwar nicht mehr die volle Rechenleistung des Systems beansprucht, weil der Prozess die meiste Zeit „schläft“, aber die Bedingung immer noch unnötig oft geprüft wird.
Aktives Warten bzw. Busy Waiting gilt im Allgemeinen als sehr schlechter Programmierstil und sollte nur als allerletzte Möglichkeit verwendet werden. Moderne Betriebssysteme bzw. Laufzeitumgebungen bieten in der Regel Locks oder Monitore an, die es erlauben, eine Bedingung nur genau dann erneut zu prüfen, wenn sich die Variablen, von denen sie abhängt, geändert haben.