Файл, пишущий с перекрытым IO по сравнению с файлом, пишущим в отдельном потоке

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

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

7
задан Warpin 16 June 2010 в 05:00
поделиться

3 ответа

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

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

Править

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

5
ответ дан 7 December 2019 в 05:18
поделиться

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

1
ответ дан 7 December 2019 в 05:18
поделиться

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

2
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: