API do pool de threads
A API (interface de programação de aplicativo) do pool de threads usa um design baseado em objeto. Cada um dos seguintes objetos é representado por uma estrutura de dados no modo de usuário:
- Um objeto de pool é um conjunto de threads de trabalho que podem ser usados para executar o trabalho. Cada processo pode criar vários pools isolados com características diferentes, conforme necessário. Há também um pool padrão para cada processo.
- Um grupo de limpeza está associado a um conjunto de objetos geradores de retorno de chamada. Existem funções para aguardar e liberar todos os objetos que são membros de cada grupo de limpeza. Isso libera o aplicativo de manter o controle de todos os objetos que ele criou.
- Um objeto de trabalho é atribuído a um pool e, opcionalmente, a um grupo de limpeza. Ele pode ser postado, fazendo com que um thread de trabalho do pool execute seu retorno de chamada. Um objeto de trabalho pode ter várias postagens pendentes; cada um gera um retorno de chamada. A pós-operação não pode falhar devido à falta de recursos.
- Um objeto de temporizador controla o agendamento de retornos de chamada. Sempre que um temporizador expira, seu retorno de chamada é postado no pool de trabalho. A configuração de um temporizador não pode falhar devido à falta de recursos.
- Um objeto de espera faz com que um thread de garçom aguarde em um identificador de espera. Depois que a espera for atendida ou o período de tempo limite expirar, o thread do garçom postará o retorno de chamada dos objetos de espera no pool de trabalho da espera. A configuração de uma espera não pode falhar devido à falta de recursos.
- Um objeto de E/S associa um identificador de arquivo à porta de conclusão de E/S do pool de threads. Quando uma operação de E/S assíncrona for concluída, um thread de trabalho obterá o status da operação e chamará o retorno de chamada do objeto de E/S.
A tabela a seguir descreve os recursos das APIs do pool de threads original e atual.
Característica | Original API | API atual |
---|---|---|
Sincronia |
RegisterWaitForSingleObject UnregisterWaitEx |
CloseThreadpoolWait CreateThreadpoolWait SetThreadpoolWait WaitForThreadpoolWaitCallbacks |
Trabalho |
queueUserWorkItem |
CloseThreadpoolWork CreateThreadpoolWork SubmitThreadpoolWork TrySubmitThreadpoolCallback WaitForThreadpoolWorkCallbacks |
Temporizador |
CreateTimerQueue CreateTimerQueueTimer ChangeTimerQueueTimer DeleteTimerQueueTimer DeleteTimerQueueEx |
CloseThreadpoolTimer CreateThreadpoolTimer IsThreadpoolTimerSet SetThreadpoolTimer WaitForThreadpoolTimerCallbacks |
E/S |
BindIoCompletionCallback |
CancelThreadpoolIo CloseThreadpoolIo CreateThreadpoolIo StartThreadpoolIo waitForThreadpoolIoCallbacks |
Grupo de limpeza |
CloseThreadpoolCleanupGroup CloseThreadpoolCleanupGroupMembers CreateThreadpoolCleanupGroup |
|
Piscina |
CloseThreadpool CreateThreadpool SetThreadpoolThreadMaximum SetThreadpoolThreadMinimum |
|
Ambiente de retorno de chamada |
DestroyThreadpoolEnvironment InitializeThreadpoolEnvironment SetThreadpoolCallbackCleanupGroup SetThreadpoolCallbackLibrary SetThreadpoolCallbackPool SetThreadpoolCallbackPriority SetThreadpoolCallbackRunsLong |
|
Callback |
CallbackMayRunLong |
|
Limpeza do retorno de chamada |
DisassociateCurrentThreadFromCallback FreeLibraryWhenCallbackReturns LeaveCriticalSectionWhenCallbackReturns ReleaseMutexWhenCallbackReturns ReleaseSemaphoreWhenCallbackReturns SetEventWhenCallbackReturns |
Tópicos relacionados