распределение процессорного времени между потоками
Есть такая задача. В системе в любой момент времени работает от 1 до N потоков (для простоты - пускай в одном процессе). Задача состоит в том, что я не могу всем этим потокам вместе взятым отдать больше 50% процессорного времени, но в то же время желаю, чтобы они использовали это время максимально.
Т.е. если у меня работает 2 потока - то каждый должен "есть" по 25%, если 10 - то по 5%.
Разрешима ли такая задача на уровне Win32 API? Можно ли ограничить процессорное время используемое потоком?
Заранее благодарен.
А зачем тебе остальные 50% ? Это не праздный вопрос. От него зависит мой дальнейший ответ.
Система представляет собой поисковый сервер. Движок собирающий данные (т.н. спайдер) работает в нескольких потоках. Кроме того, на этом же сервере сидит web-морда.
Так вот, 50% - спайдеру, 50% - web-серверу.
На самом деле число 50 - сказано от фонаря. Смысл в том, что это будет какая-то граница - а оптимальное значение еще будет подбираться.
В основном рабочем цикле просматриваю загрузку процессора текущим процессом(статей в инете навалом, вот хотя бы эта) Далее если полученное значение зашкаливает за 50% - просто вызываю Sleep() с неким числом(устанавливать его в зависисмости от того насколько "зашкаливает" - если большой перевес - поток должен "уснуть" на большее время). Я уж не знаю, никто не предложил ничего стоящего, вот я и высказался :-)))))
можно просто увеличить приоритет нужного потока
это не поможет. к примеру, бесконечный цикл в потоке с приоритетом THREAD_PRIORITY_NORMAL и в потоке с приоритетом THREAD_PRIORITY_ABOVE_NORMAL будут грузить процессор одинаково.
но если у потоков бесконечные циклы то процессор будет сильнее загружать тот поток у которого приоритет выше
Я этого не отрицаю, но ведь именно ТОЧНО 40% загрузки (не больше не меньше) установкой приоритетов не достичь.