Thread Pool API

L'API (Thread Pool Application Programming Interface) usa una progettazione basata su oggetti. Ognuno degli oggetti seguenti è rappresentato da una struttura di dati in modalità utente:

  • Un oggetto pool è un set di thread di lavoro che possono essere usati per eseguire il lavoro. Ogni processo può creare più pool isolati con caratteristiche diverse in base alle esigenze. È disponibile anche un pool predefinito per ogni processo.
  • Un gruppo di pulizia è associato a un set di oggetti di generazione di callback. Le funzioni esistono per attendere e rilasciare tutti gli oggetti membri di ogni gruppo di pulizia. In questo modo l'applicazione consente di tenere traccia di tutti gli oggetti creati.
  • Un oggetto di lavoro viene assegnato a un pool e, facoltativamente, a un gruppo di pulizia. Può essere inserito, causando l'esecuzione del callback da parte di un thread di lavoro dal pool. Un oggetto di lavoro può avere più post in sospeso; ognuno genera un callback. L'operazione post non può avere esito negativo a causa della mancanza di risorse.
  • Un oggetto timer controlla la pianificazione dei callback. Ogni volta che un timer scade, il callback viene inviato al pool di lavoro. L'impostazione di un timer non può avere esito negativo a causa della mancanza di risorse.
  • Un oggetto wait fa sì che un thread waiter attenda un handle waitable. Dopo che l'attesa è stata soddisfatta o il periodo di timeout scade, il thread del waiter invia il callback degli oggetti wait al pool di lavoro dell'attesa. L'impostazione di un'attesa non può avere esito negativo a causa della mancanza di risorse.
  • Un oggetto I/O associa un handle di file alla porta di completamento di I/O per il pool di thread. Al termine di un'operazione di I/O asincrona, un thread di lavoro preleva lo stato dell'operazione e chiama il callback dell'oggetto I/O.

Nella tabella seguente vengono descritte le funzionalità delle API del pool di thread originali e correnti.

Funzionalità API originale API corrente
Sincrono Registerwaitforsingleobject
UnregisterWaitEx
CloseThreadpoolWait
CreateThreadpoolWait
SetThreadpoolWait
WaitForThreadpoolWaitCallbacks
Lavoro Queueuserworkitem
CloseThreadpoolWork
CreateThreadpoolWork
SubmitThreadpoolWork
TrySubmitThreadpoolCallback
WaitForThreadpoolWorkCallbacks
Timer CreateTimerQueue
CreateTimerQueueTimer
ChangeTimerQueueTimer
DeleteTimerQueueTimer
DeleteTimerQueueEx
CloseThreadpoolTimer
CreateThreadpoolTimer
IsThreadpoolTimerSet
SetThreadpoolTimer
WaitForThreadpoolTimerCallbacks
I/O BindIoCompletionCallback
CancelThreadpoolIo
CloseThreadpoolIo
CreateThreadpoolIo
StartThreadpoolIo
WaitForThreadpoolIoCallbacks
Gruppo di pulizia CloseThreadpoolCleanupGroup
Closethreadpoolcleanupgroupmembers
CreateThreadpoolCleanupGroup
Pool CloseThreadpool
CreateThreadpool
SetThreadpoolThreadMaximum
SetThreadpoolThreadMinimum
Ambiente di callback DestroyThreadpoolEnvironment
InitializeThreadpoolEnvironment
SetThreadpoolCallbackCleanupGroup
SetThreadpoolCallbackLibrary
SetThreadpoolCallbackPool
SetThreadpoolCallbackPriority
SetThreadpoolCallbackRunsLong
Callback CallbackMayRunLong
Pulizia del callback DisassociateCurrentThreadFromCallback
FreeLibraryWhenCallbackReturns
LeaveCriticalSectionWhenCallbackReturns
ReleaseMutexWhenCallbackReturns
ReleaseSemaphoreWhenCallbackReturns
SetEventWhenCallbackReturns

 

Pool di thread

Uso delle funzioni del pool di thread