• XSS.stack #1 – первый литературный журнал от юзеров форума

CreateNamedPipeW vs CreateFileW (IOCP)

Encommerce

(L3) cache
Пользователь
Регистрация
25.11.2022
Сообщения
235
Реакции
97
Пишу модуль для многопоточного чтения/записи файлов с использованием портов завершения.
В качестве привязок можно использовать как CreateNamedPipeW, так и CreateFileW.
Что из этого на ваш взгляд предпочтительнее?
 
А какая разница? Первое для работы с пайпами, второе для работы с файлами. И причем IOCP к многопоточности? Эта технология обычно используется для работы с асинхронностью, по завершению операции в OVERLAPPED сигналится ивент и нотификация летит в очередь. GetQuequedCompletionStatus() достаёт информацию из очереди и в зависимости от того, что прилетело в completion key поток-воркер, который словил нотификацию, выполняет нужные действия.
 
Как CreateNamedPipeW, так и CreateFileW в конце концов используют низкоуровневую NtCreateFile.
 
CreateNamedPipe - не уходит в NtCreateFile.
CreateNamedPipe ->NtCreateNamedPipeFile (creates Named Pipe File Object. Named Pipes are especial kind of files, so all functionality is provided with file's functions like NtReadFile, NtWriteFile etc.
Named Pipes are frequently used in NT system, for example as stdin and stdout handles.)
И не понятно, что за "привязки" имел ввиду ТС...
 
Скорее всего имелось ввиду ассоциирование хендла файла с очередью
Да
А какая разница? Первое для работы с пайпами, второе для работы с файлами
Уже понял
И причем IOCP к многопоточности?
HANDLE WINAPI CreateIoCompletionPort(
_In_ HANDLE FileHandle,
_In_opt_ HANDLE ExistingCompletionPort,
_In_ ULONG_PTR CompletionKey,
_In_ DWORD NumberOfConcurrentThreads
);
 
Да

Уже понял
Ну блин, перед тем как задавать такие вопросы надо хотя бы немного читать документацию.

The maximum number of threads that the operating system can allow to concurrently process I/O completion packets for the I/O completion port. This parameter is ignored if the ExistingCompletionPort parameter is not NULL.

If this parameter is zero, the system allows as many concurrently running threads as there are processors in the system.


В этом параметре указываешь количество потоков воркеров, которые будут получать инфу из твоей очереди. Если параметр 0, система позволит ассоциировать количество потоков эквивалентное количеству ядер.
 
Ну блин, перед тем как задавать такие вопросы надо хотя бы немного читать документацию.
Да не ругайтесь, с кем не бывает)
Очередной рансом?
Нет конечно :)
 
CreateNamedPipe - не уходит в NtCreateFile.
CreateNamedPipe ->NtCreateNamedPipeFile (creates Named Pipe File Object. Named Pipes are especial kind of files, so all functionality is provided with file's functions like NtReadFile, NtWriteFile etc.
Named Pipes are frequently used in NT system, for example as stdin and stdout handles.)
И не понятно, что за "привязки" имел ввиду ТС...
Да, извиняюсь с NtCreateFile и пайпами перепутал.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх