API пула потоков

Интерфейс API пула потоков использует объектную конструкцию. Каждый из следующих объектов представлен структурой данных в пользовательском режиме:

  • Объект пула — это набор рабочих потоков, которые можно использовать для выполнения работы. При необходимости каждый процесс может создавать несколько изолированных пулов с разными характеристиками. Для каждого процесса также есть пул по умолчанию.
  • Группа очистки связана с набором объектов, генерирующих обратный вызов. Существуют функции для ожидания и освобождения всех объектов, которые являются членами каждой группы очистки. Это освобождает приложение от отслеживания всех созданных им объектов.
  • Рабочий объект назначается пулу и при необходимости группе очистки. Его можно опубликовать, в результате чего рабочий поток из пула выполнит обратный вызов. Рабочий объект может иметь несколько невыполненных записей; каждый из них создает обратный вызов. Операция после операции не может завершиться сбоем из-за нехватки ресурсов.
  • Объект таймера управляет планированием обратных вызовов. Каждый раз, когда истекает срок действия таймера, его обратный вызов отправляется в его рабочий пул. Установка таймера не может завершиться сбоем из-за нехватки ресурсов.
  • Объект wait приводит к тому, что поток ожидания ожидает дескриптора. После выполнения ожидания или истечения времени ожидания поток официанта отправляет обратный вызов объектов ожидания в рабочий пул ожидания. Установка ожидания не может завершиться ошибкой из-за нехватки ресурсов.
  • Объект ввода-вывода связывает дескриптор файла с портом завершения ввода-вывода для пула потоков. После завершения асинхронной операции ввода-вывода рабочий поток выбирает состояние операции и вызывает обратный вызов объекта ввода-вывода.

В следующей таблице описаны функции исходных и текущих API пулов потоков.

Компонент Исходный API Текущий API
Синхронизация RegisterWaitForSingleObject
UnregisterWaitEx
CloseThreadpoolWait
CreateThreadpoolWait
SetThreadpoolWait
WaitForThreadpoolWaitCallbacks
Работа QueueUserWorkItem
CloseThreadpoolWork
CreateThreadpoolWork
SubmitThreadpoolWork
TrySubmitThreadpoolCallback
WaitForThreadpoolWorkCallbacks
Таймер CreateTimerQueue
CreateTimerQueueTimer
ChangeTimerQueueTimer
DeleteTimerQueueTimer
DeleteTimerQueueEx
CloseThreadpoolTimer
CreateThreadpoolTimer
IsThreadpoolTimerSet
SetThreadpoolTimer
WaitForThreadpoolTimerCallbacks
Ввод-вывод BindIoCompletionCallback
CancelThreadpoolIo
CloseThreadpoolIo
CreateThreadpoolIo
StartThreadpoolIo
WaitForThreadpoolIoCallbacks
Группа очистки CloseThreadpoolCleanupGroup
CloseThreadpoolCleanupGroupMembers
CreateThreadpoolCleanupGroup
пул CloseThreadpool
CreateThreadpool
SetThreadpoolThreadMaximum
SetThreadpoolThreadMinimum
Среда обратного вызова DestroyThreadpoolEnvironment
InitializeThreadpoolEnvironment
SetThreadpoolCallbackCleanupGroup
SetThreadpoolCallbackLibrary
SetThreadpoolCallbackPool
SetThreadpoolCallbackPriority
SetThreadpoolCallbackRunsLong
Обратный вызов CallbackMayRunLong
Очистка обратного вызова Отмена связиCurrentThreadFromCallback
FreeLibraryWhenCallbackReturns
LeaveCriticalSectionWhenCallbackReturns
ReleaseMutexWhenCallbackReturns
ReleaseSemaphoreWhenCallbackReturns
SetEventWhenCallbackReturns

 

Пулы потоков

Использование функций пула потоков