Прочитав эту статью, в которой говорится:
После завершения работы устройства (операция ввода-вывода) - он уведомляет CPU через прерывание.
.........
Однако это только статус завершения существует на уровне ОС; процесс имеет собственное пространство памяти, которое должно получать уведомления
.........
Поскольку библиотека /BCL использует стандартный P/Invoke с перекрытой системой ввода/вывода, он уже зарегистрировал Порт завершения ввода-вывода (IOCP), который является частью пула потоков.
.........
Таким образом, поток пула потоков ввода-вывода заимствован кратко для выполнения APC, который уведомляет задачу о ее завершении.
Мне была интересна смелая часть:
Если я правильно понял, после завершения операции ввода-вывода, он должен уведомить фактический процесс, который выполнил операцию ввода-вывода.
Вопрос №1:
Означает ли это, что он захватывает новый поток пула потоков для каждой завершенной операции ввода-вывода? Или это выделенное количество потоков для этого?
Вопрос № 2:
Глядя на:
for (int i=0;i<1000;i++)
{
PingAsync_NOT_AWAITED(i); //notice not awaited !
}
Означает ли это, что у меня будет 1000 потоков ниток IOCP одновременно (вроде), запущенных здесь, когда все будет завершено?