Threadpool-API

Die Api (Application Programming Interface, Anwendungsprogrammierschnittstelle) des Threadpools verwendet einen objektbasierten Entwurf. Jedes der folgenden Objekte wird durch eine Datenstruktur im Benutzermodus dargestellt:

  • Ein Poolobjekt ist ein Satz von Arbeitsthreads, die zum Ausführen von Aufgaben verwendet werden können. Jeder Prozess kann je nach Bedarf mehrere isolierte Pools mit unterschiedlichen Merkmalen erstellen. Es gibt auch einen Standardpool für jeden Prozess.
  • Eine Bereinigungsgruppe ist einem Satz von Rückrufgenerierungsobjekten zugeordnet. Funktionen sind vorhanden, um auf alle Objekte zu warten und frei zu geben, die Mitglieder jeder Bereinigungsgruppe sind. Dadurch kann die Anwendung nicht alle objekte nachverfolgen, die sie erstellt hat.
  • Ein Arbeitsobjekt wird einem Pool und optional einer Bereinigungsgruppe zugewiesen. Sie kann gesendet werden, sodass ein Arbeitsthread aus dem Pool seinen Rückruf ausführen kann. Ein Arbeitsobjekt kann mehrere ausstehende Beiträge haben. jeder generiert einen Rückruf. Der Nach-Vorgang kann aufgrund fehlender Ressourcen nicht fehlschlagen.
  • Ein Timerobjekt steuert die Planung von Rückrufen. Jedes Mal, wenn ein Timer abläuft, wird sein Rückruf an seinen Workerpool gesendet. Das Festlegen eines Timers kann aufgrund fehlender Ressourcen nicht fehlschlagen.
  • Ein Wait-Objekt bewirkt, dass ein Wartethread auf ein wartebares Handle wartet. Nachdem der Wartezeitraum erfüllt wurde oder der Time outzeitraum abgelaufen ist, übersendet der Wartethread den Rückruf der Warteobjekte an den Workerpool des Wartebereichs. Das Festlegen einer Wartezeit kann aufgrund fehlender Ressourcen nicht fehlschlagen.
  • Ein E/A-Objekt ordnet dem E/A-Abschlussport für den Threadpool ein Dateihand handle zu. Wenn ein asynchroner E/A-Vorgang abgeschlossen ist, ruft ein Arbeitsthread den Status des Vorgangs ab und ruft den Rückruf des E/A-Objekts auf.

In der folgenden Tabelle werden die Features der ursprünglichen und aktuellen Threadpool-APIs beschrieben.

Funktion Ursprüngliche API Aktuelle API
Synchronisieren Registerwaitforsingleobject
UnregisterWaitEx
CloseThreadpoolWait
CreateThreadpoolWait
SetThreadpoolWait
WaitForThreadpoolWaitCallbacks
Work Queueuserworkitem
CloseThreadpoolWork
CreateThreadpoolWork
SubmitThreadpoolWork
TrySubmitThreadpoolCallback
WaitForThreadpoolWorkCallbacks
Timer CreateTimerQueue
CreateTimerQueueTimer
ChangeTimerQueueTimer
DeleteTimerQueueTimer
DeleteTimerQueueEx
CloseThreadpoolTimer
CreateThreadpoolTimer
IsThreadpoolTimerSet
SetThreadpoolTimer
WaitForThreadpoolTimerCallbacks
E/A BindIoCompletionCallback
CancelThreadpoolIo
CloseThreadpoolIo
CreateThreadpoolIo
StartThreadpoolIo
WaitForThreadpoolIoCallbacks
Bereinigungsgruppe CloseThreadpoolCleanupGroup
Closethreadpoolcleanupgroupmembers
CreateThreadpoolCleanupGroup
Pool CloseThreadpool
CreateThreadpool
SetThreadpoolThreadMaximum
SetThreadpoolThreadMinimum
Rückrufumgebung DestroyThreadpoolEnvironment
InitializeThreadpoolEnvironment
SetThreadpoolCallbackCleanupGroup
SetThreadpoolCallbackLibrary
SetThreadpoolCallbackPool
SetThreadpoolCallbackPriority
SetThreadpoolCallbackRunsLong
Rückruf CallbackMayRunLong
Rückrufbereinigung DisassociateCurrentThreadFromCallback
FreeLibraryWhenCallbackReturns
LeaveCriticalSectionWhenCallbackReturns
ReleaseMutexWhenCallbackReturns
ReleaseSemaphoreWhenCallbackReturns
SetEventWhenCallbackReturns

Threadpools

Verwenden der Threadpoolfunktionen