В моем приложении есть несколько потоков, которые работают в фоновом режиме. Они подключаются к базе данных и выполняют трудоемкие запросы на выборку. В большинстве случаев эти запросы возвращают только несколько записей. Однако время от времени они могут возвращать десятки тысяч записей. Все это затем обрабатывается в цикле.
Поскольку такая ситуация может возникнуть в нескольких потоках одновременно, я не хочу, чтобы мое приложение использовало 100% процессорного времени, когда эти потоки обрабатывают данные; я также не хочу, чтобы все потоки боролись за процессорное время. Поэтому я вызываю функцию Sleep () на каждой итерации циклов в этих потоках.
Однако я не знаю, как настроить время сна. Я не хочу, чтобы петли длились вечно, поэтому период сна не может быть слишком длинным. Я выставляю 2 миллисекунды на каждой итерации (в каждом потоке) (почему 2 мс? - хороший вопрос :)).
С другой стороны, я подумал, что могу продлить время сна, но вызывать сон только один раз каждые n итераций (скажем, Sleep (100) каждые 50 итераций). Какой подход выбрать? Один цикл цикла занимает около 30 мс каждый (без ожидания).
Пожалуйста, сообщите.
Спасибо!
Мариуш.
Но если это выполняется в фоновом режиме на компьютере, над которым также кто-то работает (например, пишет электронную таблицу), вы не хотите, чтобы фоновый процесс делал процесс переднего плана непригодным для использования.
– dummzeuch07 июня 2009, 08:43Верно, но именно поэтому я написал, что приоритет фонового потока можно снизить, чтобы другие приложения (или основной поток) оставались отзывчивыми, но при этом использовали весь потенциал системы. В современных (многоядерных) системах поддержание достаточной загрузки всех ядер - гораздо большая проблема, чем отсутствие реакции приложения переднего плана. И в любом случае массивные неоптимизированные операции ввода-вывода представляют собой гораздо большую угрозу для удобства использования системы, чем высокая загрузка процессора.
– mghie07 июня 2009, 09:34