Запись файла с перекрытием ввода-вывода против записи файла в отдельном потоке - PullRequest
7 голосов
/ 16 июня 2010

Есть ли какое-либо преимущество в использовании записи файлов с перекрывающимся вводом-выводом в Windows по сравнению с простой записью файлов в отдельном потоке, который я создаю?

[Изменить - обратите внимание, что я делаю записи в файлбез системного кэширования, т.е. я использую флаг FILE_FLAG_NO_BUFFERING в CreateFile)

Ответы [ 4 ]

5 голосов
/ 16 июня 2010

Поскольку по умолчанию все записи кэшируются в системном кеше, мало преимуществ делать перекрывающийся ввод-вывод или вообще создавать отдельный поток для записи. Большинство вызовов WriteFile - это просто memcpys по своей сути, которые лениво записываются на диск ОС оптимальным образом с другими операциями записи.

Конечно, вы можете отключить буферизованный ввод-вывод с помощью флагов для CreateFile, и тогда есть преимущества в выполнении какого-то асинхронного ввода-вывода - но вы, вероятно, этого не делали / не должны делать.

Редактировать

ОП уточнил, что они фактически используют небуферизованный ввод / вывод. В этом случае два предложенных решения почти идентичны; внутренне Windows использует пул потоков для обслуживания асинхронных запросов ввода-вывода. Но гипотетически Windows может быть более эффективной, потому что их половина реализована в ядре, имеет меньше переключений контекста и т. Д.

2 голосов
/ 16 июня 2010

Одним из преимуществ перекрывающегося ввода-вывода является то, что он позволяет одному потоку (или, как правило, пулу потоков) обрабатывать произвольное количество запросов ввода-вывода одновременно.Это может не быть преимуществом для однопользовательского настольного приложения, но для серверного приложения, которое может получать запросы на ввод / вывод от множества разных клиентов, это может быть серьезной победой.

1 голос
/ 16 июня 2010

Возможно, потому что перекрывающийся ввод / вывод в окнах скажет Windows записывать файл в свое время в фоновом режиме, в отличие от создания целого нового потока и участия в операции блокировки?

0 голосов
/ 16 июня 2010

Я только что прочитал эту статью:

http://msdn.microsoft.com/en-us/library/aa365683(VS.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...