Threadreihenfolgedienst

Der Threadreihenfolgedienst steuert die Ausführung eines oder mehrerer Clientthreads. Dadurch wird sichergestellt, dass jeder Clientthread einmal während des angegebenen Zeitraums und in relativer Reihenfolge ausgeführt wird.

Windows Server 2003 und Windows XP: Der Threadreihenfolgedienst ist ab Windows Vista und Windows Server 2008 verfügbar.

Der Threadreihenfolgedienst ist standardmäßig deaktiviert und muss vom Benutzer gestartet werden. Während der Threadreihenfolgedienst ausgeführt wird, wird er alle 5 Sekunden aktiviert, um zu überprüfen, ob eine neue Anforderung vorliegt, auch wenn sich das System im Leerlauf befindet. Dadurch wird verhindert, dass das System länger als 5 Sekunden in den Ruhezustand versetzt wird, was dazu führt, dass das System mehr Strom verbraucht. Wenn die Energieeffizienz für die Anwendung von entscheidender Bedeutung ist, ist es besser, den Threadreihenfolgedienst nicht zu verwenden und stattdessen dem Systemplaner die Verwaltung der Ausführung von Threads zu ermöglichen.

Jeder Clientthread gehört zu einer Threadreihenfolgegruppe. Der übergeordnete Thread erstellt eine oder mehrere Threadreihenfolgegruppen, indem die AvRtCreateThreadOrderingGroup-Funktion aufgerufen wird. Der übergeordnete Thread verwendet diese Funktion, um den Zeitraum für die Threadreihenfolgegruppe und ein Timeoutintervall anzugeben.

Zusätzliche Clientthreads rufen die AvRtJoinThreadOrderingGroup-Funktion auf, um einer vorhandenen Threadreihenfolgegruppe beizutreten. Diese Threads geben an, ob sie ein Vorgänger oder Nachfolger des übergeordneten Threads in der Ausführungsreihenfolge sein sollen. Es wird erwartet, dass jeder Clientthread einen bestimmten Verarbeitungsaufwand für jeden Zeitraum abschließt. Alle Threads innerhalb der Gruppe sollten ihre Ausführung innerhalb des Zeitraums und des Timeoutintervalls abschließen.

Die Threads einer Threadreihenfolgegruppe schließen ihren Verarbeitungscode in eine Schleife ein, die von der AvRtWaitOnThreadOrderingGroup-Funktion gesteuert wird. Zunächst werden die Vorgängerthreads einzeln in der Reihenfolge ausgeführt, in der sie der Gruppe beigetreten sind, während die übergeordneten und nachfolgernden Threads bei ihren Aufrufen von AvRtWaitOnThreadOrderingGroup blockiert werden. Wenn jeder Vorgängerthread mit seiner Verarbeitung abgeschlossen ist, kehrt die Ausführungssteuerung an den Anfang seiner Verarbeitungsschleife zurück, und der Thread ruft AvRtWaitOnThreadOrderingGroup erneut auf, um bis zum nächsten Turn zu blockieren. Nachdem alle Vorgängerthreads diese Funktion aufgerufen haben, kann der Threadreihenfolgedienst den übergeordneten Thread planen. Wenn schließlich der übergeordnete Thread seine Verarbeitung beendet und AvRtWaitOnThreadOrderingGroup erneut aufruft, kann der Threadreihenfolgedienst die Nachfolgerthreads einzeln in der Reihenfolge planen, in der sie der Gruppe beigetreten sind. Wenn alle Threads ihre Ausführung abschließen, bevor ein Punkt endet, warten alle Threads, bis der rest des Zeitraums verstrichen ist, bevor sie erneut ausgeführt werden.

Wenn der Client nicht mehr als Teil der Threadreihenfolgegruppe ausgeführt werden muss, ruft er die AvRtLeaveThreadOrderingGroup-Funktion auf, um sich selbst aus der Gruppe zu entfernen. Beachten Sie, dass sich der übergeordnete Thread nicht aus einer Threadreihenfolgegruppe entfernen sollte. Wenn die Ausführung eines Threads nicht abgeschlossen wird, bevor der Zeitraum und das Timeoutintervall verstrichen sind, wird er aus der Gruppe gelöscht.

Der übergeordnete Thread ruft die AvRtDeleteThreadOrderingGroup-Funktion auf, um die Threadreihenfolgegruppe zu löschen. Die Threadreihenfolgegruppe wird auch zerstört, wenn der übergeordnete Thread seine Ausführung nicht abgeschlossen hat, bevor der Zeitraum plus das Timeoutintervall verstrichen ist. Wenn die Threadreihenfolgegruppe zerstört wird, schlagen aufruft AvRtWaitOnThreadOrderingGroup von Threads dieser Gruppe fehl oder timeout.