Влияет ли SetFileBandwidthReservation на производительность отображаемого в память файла? - PullRequest
1 голос
/ 11 июня 2010

Влияет ли эта функция на производительность отображаемого в память файла?

Вот проблема, которую мне нужно решить:

У меня есть два приложения, которые борются за доступ к диску: «читатель» и «программа обновления». Вся система работает на Windows Server 2008 R2 x64

«Updater» постоянно обращается к диску линейно, обновляя данные. Их система настроена таким образом, что у программы обновления всегда есть бесконечные данные для обновления. Учтите, что оно постоянно аппроксимирует решение огромной системы уравнений, которая занимает весь диск объемом 2 ТБ. Updater использует ReadFile и WriteFile для линейной обработки данных.

«Читатель» иногда вызывается пользователем для получения некоторых фрагментов данных. Обычно пользователь читает с диска несколько блоков по 4 Кб и останавливается. Иногда пользователю необходимо прочитать до 100 МБ последовательно. В исключительных случаях до нескольких гигабайт. Reader отображает файлы в память для получения необходимых данных.

Я бы хотел, чтобы «читатель» имел абсолютный приоритет, чтобы «обновитель» полностью останавливался при необходимости, чтобы «читатель» мог получать данные, необходимые пользователю как можно скорее.

Решается ли эта проблема с помощью вызовов SetPriorityClass и SetFileBandwidthReservation?

Мне бы очень не хотелось помещать имя входа для синхронизации в "reader" и "updater", а скорее, чтобы ОС позаботилась о приоритетах.

1 Ответ

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

Функции, которые вы упомянули, не имеют ничего общего с вашей задачей, IMO.

Похоже, что на самом деле запрашивается одновременный доступ к файлам из нескольких процессов - и ОС просто сделает то, что вы просили.Таким образом, вам придется делать то, что вы ненавидите, добавить логику синхронизации, чтобы обеспечить правильность.

Согласно вашему описанию - открытие файла для монопольного доступа как из программы чтения, так и из программы обновления решает задачу обеспечения непрерывной работы программы чтения.Вторая цель состоит в том, чтобы сделать прерывание обновления по запросу читателя.

Способ решения этой проблемы зависит от того, можно ли остановить программу обновления в середине своей работы.В простом случае читатель может уведомить программу обновления о том, что он должен прекратить свою работу как можно скорее и ждать.

...