У меня есть программа, написанная на C ++, которая постоянно записывает файлы на жесткий диск. Используемый жесткий диск достаточно быстр, чтобы справиться с этим, не замедляя работу приложения.
Теперь время от времени мне нравится программа для копирования / синхронизации файлов на наш сервер. Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы копия использовала много системных ресурсов, поэтому она не замедляет работу приложения или запись новых файлов.
Я полагаю, что выполнение копирования / синхронизации в фоновом потоке несколько поможет, но это по-прежнему вызывает нагрузку на жесткий диск и замедляет запись новых файлов, верно?
Итак, я думаю, мой вопрос, как я могу контролировать скорость операции копирования? Или есть другой лучший способ сделать это?
Любая помощь очень ценится.
Деннис
Перечитав это: «Время от времени мне нравится, когда программа копирует / синхронизирует файлы на наш сервер. Сложная задача состоит в том, что я не хочу, чтобы копия использовала много системных ресурсов, поэтому она не замедляет работу приложения или написание новых файлов. »
Это означает, что вы на самом деле не пытаетесь избежать усердной работы над боксом; Вы просто не хотите отставать от другой работы с файлами.
Я бы создал фоновый поток, который делает весь доступ к диску; и предоставьте 2 очереди для работы. Первый — это новые файлы для записи; 2-й — это файлы для копирования. Затем этот поток может использовать диск на полной скорости, работая с чанками одновременно; с приоритетом получения чанка из новой области файла. Это позволит вам начать делать копию; и затем полностью прекратите копирование, когда нужно обработать много файлов (в случае пакета), а затем скопируйте так быстро, как только сможете, после того как все будет обработано.
Других решений пока нет …