Что происходит с Win32 IO Completion Port и синхронно появляющимся IO? - PullRequest
1 голос
/ 27 марта 2012

Согласно http://support.microsoft.com/kb/156932 вызовы ReadFile могут отображаться синхронно, если выполняются определенные условия. Например, если целевой файл является сжатым NTFS. В статье ничего не говорится о том, что происходит, если дескриптор файла связан с IOCP.

Так что же происходит в этом случае, когда дескриптор файла связан с IOCP? Буду ли я получать пакеты завершения ввода-вывода для этого запроса или запрос будет выполняться полностью синхронно?

Если это так, я должен поместить весь вызов ReadFile в рабочий поток. Поток, который первоначально выполняет вызов ReadFile, не может блокироваться. Причина, по которой я рассматриваю IOCP, заключается в том, что помещение вызова ReadFile в рабочий поток означает переключение контекста на рабочий поток, который затем сразу же блокируется после чтения ReadFile.

1 Ответ

2 голосов
/ 27 марта 2012

Любая перекрывающаяся операция, которая завершается с ERROR_SUCCESS ИЛИ с ERROR_IO_PENDING, генерирует пакет завершения.См. совет 4 этой статьи базы знаний .

. Предполагается, что вы не включили FILE_SKIP_COMPLETION_PORT_ON_SUCCESS для данного дескриптора, используя SetFileCompletionNotificationModes () .Если вы включили FILE_SKIP_COMPLETION_PORT_ON_SUCCESS, то операции, завершающиеся с ERROR_SUCCESS, НЕ будут генерировать пакет завершения, и вы должны выполнить обработку завершения в точке, где вы выполнили перекрывающуюся операцию.

...