Threadpool-API

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

  • Ein Poolobjekt ist ein Satz von Arbeitsthreads, die zum Ausführen von Arbeiten verwendet werden können. Jeder Prozess kann bei Bedarf mehrere isolierte Pools mit unterschiedlichen Merkmalen erstellen. Es gibt auch einen Standardpool für jeden Prozess.
  • Eine sauber-Up-Gruppe ist einer Gruppe von Rückruf-generierenden Objekten zugeordnet. Es gibt Funktionen, die auf alle Objekte warten und freigeben, die Mitglieder jeder sauber-up-Gruppe sind. Dadurch wird die Anwendung davon befreit, alle von ihr erstellten Objekte nachzuverfolgen.
  • Ein Arbeitsobjekt wird einem Pool und optional einer sauber-Up-Gruppe zugewiesen. Es kann bereitgestellt werden, sodass ein Workerthread aus dem Pool seinen Rückruf ausführt. Ein Arbeitsobjekt kann mehrere ausstehende Beiträge aufweisen; jeder generiert einen Rückruf. Der Nachbereitungsvorgang 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 den Workerpool gesendet. Das Festlegen eines Timers kann aufgrund fehlender Ressourcen nicht fehlschlagen.
  • Ein wait-Objekt bewirkt, dass ein Kellnerthread auf ein wartebares Handle wartet. Nachdem die Wartezeit erfüllt wurde oder der Timeoutzeitraum abläuft, sendet der Kellnerthread den Rückruf der Warteobjekte an den Workerpool des Wartevorgangs. Das Festlegen einer Wartezeit kann aufgrund fehlender Ressourcen nicht fehlschlagen.
  • Ein E/A-Objekt ordnet dem E/A-Abschlussport für den Threadpool ein Dateihandle zu. Wenn ein asynchroner E/A-Vorgang abgeschlossen ist, übernimmt ein Workerthread die status des Vorgangs 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
Synch 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ückruf sauber nach oben DisassociateCurrentThreadFromCallback
FreeLibraryWhenCallbackReturns
LeaveCriticalSectionWhenCallbackReturns
ReleaseMutexWhenCallbackReturns
ReleaseSemaphoreWhenCallbackReturns
SetEventWhenCallbackReturns

 

Threadpools

Verwenden der Threadpoolfunktionen