Threadreihenfolgedienst

Der Threadreihenfolgedienst steuert die Ausführung von einem oder mehreren Clientthreads. Dadurch wird sichergestellt, dass jeder Clientthread während des angegebenen Zeitraums und in relativer Reihenfolge einmal 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 vorhanden ist, auch wenn sich das System im Leerlauf befindet. Dadurch wird verhindert, dass das System länger als 5 Sekunden im Energiesparmodus ist, sodass das System mehr Strom verbraucht. Wenn die Energieeffizienz für die Anwendung wichtig ist, ist es besser, nicht den Threadreihenfolgedienst 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 er die AvRtCreateThreadOrderingGroup-Funktion aufruft. Der übergeordnete Thread verwendet diese Funktion, um den Zeitraum für die Threadreihenfolgegruppe und ein Time out-Intervall 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 in jedem Zeitraum eine bestimmte Verarbeitungsmenge abschließt. Alle Threads innerhalb der Gruppe sollten ihre Ausführung innerhalb des Zeitraums plus time-out-Intervall abschließen.

Die Threads einer Threadreihenfolgegruppe schließen ihren Verarbeitungscode in eine Schleife ein, die von der AvRtWaitOnThreadOrderingGroup-Funktion gesteuert wird. Erstens werden die Vorgängerthreads nacheinander in der Reihenfolge ausgeführt, in der sie der Gruppe beigetreten sind, während die übergeordneten und Nachfolgerthreads bei ihren Aufrufen von AvRtWaitOnThreadOrderingGroup blockiert werden. Wenn die Verarbeitung jedes Vorgängerthreads abgeschlossen ist, wird die Ausführungssteuerung an den Anfang der Verarbeitungsschleife zurückgerufen, und der Thread ruft AvRtWaitOnThreadOrderingGroup erneut auf, um die Ausführung bis zum nächsten Durchlauf zu blockieren. Nachdem alle Vorgängerthreads diese Funktion aufgerufen haben, kann der Threadreihenfolgedienst den übergeordneten Thread planen. Wenn der übergeordnete Thread seine Verarbeitung beendet und AvRtWaitOnThreadOrderingGroup erneut aufruft, kann der Threadreihenfolgedienst die Nachfolgerthreads nacheinander 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 alle 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 ein Thread seine Ausführung nicht vor Ablauf des Zeitraums plus time-out-Intervall abschließt, wird er aus der Gruppe gelöscht.

Der übergeordnete Thread ruft die AvRtDeleteThreadOrderingGroup-Funktion auf, um die Threadreihenfolgegruppe zu löschen. Die Threadreihenfolgegruppe wird ebenfalls zerstört, wenn der übergeordnete Thread seine Ausführung nicht vor Ablauf des Zeitraums plus time-out-Intervall abschließt. Wenn die Threadreihenfolgegruppe zerstört wird, schlagen alle Aufrufe von AvRtWaitOnThreadOrderingGroup von Threads dieser Gruppe fehl, oder es tritt ein Time out auf.