![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Здравствуйте,
Есть процесс с несколькими потоками, который будет работать на отдельном сервере.. Каждый поток по сущности выполняет схожую с остальными но отдельную задачу. Появилась мысль ускорить скорость работы программы за счет приоритетов. Меня заинтересовал такой вопрос. Если повысить приоритеты всех потоков, что нибудь изменится? Как виндоуз распределяет приоритеты? Для потоков всей системы или конкретно для одного процесса? Тоесть если изменить приоритеты всех потоков они все начнуть получать (больше/чаще) процессорного времени за счет остальных потоков в системе или же будут это делать за счет остальных потков в моем процессе? Спасибо |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: нет Всего: 18 |
MSDN:
Every thread has a base priority level determined by the thread's priority value and the priority class of its process. The system uses the base priority level of all executable threads to determine which thread gets the next slice of CPU time. Threads are scheduled in a round-robin fashion at each priority level, and only when there are no executable threads at a higher level does scheduling of threads at a lower level take place. -------------------- Подпись больше не нужна |
|||
|
||||
| Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
Есть два понятия - класс приоритета процесса и уровень приоритета потока.
Исхожя из этих двух величин у каждого потока появляется величина, называемая "действующий(базовый) приоритет". Данная величина и определяет насколько много времени данный поток будет получать по сравнению с другими потоками в системе(в независимости от того, какому процессу принадлежат иные потоки). Что бы увеличить время, выдаваемое потокам(читай, базовый приоритет) можно как увеличивать класс приоритета процесса, так и увеличивать уровень приоритета потока. При этом(грубо говоря) класс приоритета процесса имеет большую важность, чем приоритет потока. Добавлено @ 16:50 Также вот здесь можно почитать: http://msdn2.microsoft.com/en-us/library/ms685100.aspx (ёмоё, уже ответили) Добавлено @ 16:54 Довольно странная фраза, кстати. В первом предложении говорилось про некоторый "уровень" который получается комбинацией thread priority и process class. А в третьем(процитированном) говорится явно об IRQL, а вовсе не о priority level. |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Это мне известно...честно говоря я это все читал..и в MSDN -е и в Рихтере...я не смог найти ответ на вопрос
Т.е. получается и то и другое повысит производительность программы? К примеру если у меня 3 потока..каждый из них получает 20 мс процессорного времени..и за это время делает 5 операций... теперь я повышаю приоритет всех трех потоков...каждый из них станет получать 40 мс процессорного времени и будет делать 10 операций... т.е. в общем производительность программы не изменится. Так получается? Или же виндоуз станет уделять меньше внимания остальным потокам всей системы (других процессов) и будет уделять это время моим потокам..? Это сообщение отредактировал(а) azesmcar - 20.3.2007, 17:03 |
||||||
|
|||||||
| Tectoder |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
Это сообщение отредактировал(а) Tectoder - 20.3.2007, 17:12 |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
А мне это и не нужно...мне просто нужно чтобы они работали чуть быстрее чем скажем Explorer.exe...вопрос в том если виндоуз будет распределять приоритеты внутри процесса мне это ничего не даст...точнее даст только тогда когда мне будет нужно чтобы один из моих потоков работал медленее чем остальные..а мне этого не нужно...
Коротко и точно Итог. Чтобы заставить программу работать быстрее нужно повысить класс приоритета процесса и относительный приоритет потоков... Верно? |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
"быстрее" - наверное не самое правильное слово...
чтобы программа получала больше процессорного времени, нужно либо повысить класс приоритета процесса, либо приоритет всех/нужных потоков, либо и то, и другое. потому как итоговый приоритет потока является суммой класса приоритета процесса и приоритета потока. тебе imho стоит ограничиться SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); ps. btw сильно сомневаюсь, что это даст ощутимый прирост производительности программы. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Почему? Если это не дает ощутимого прироста то зачем вообще нужны приоритеты? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
потому что в обычных условиях программы, работающие параллельно с твоей, не создают ощутимую нагрузку на процессор, и практически все процессорное время отдается твоей, активно шебуршащей, программе. приоритеты могут помочь в ситуации, когда параллельно работают несколько программ, активно "отъедающих" процессорное время, или, например, когда нужно чуть более точно отмерить временной промежуток. как пример "нужности" приоритетов можно привести, например, winamp - если поставить ему приоритет ниже обычного(или оставить обычный на слабой машине), то в момент какой-либо ощутимой нагрузки на проц(сканирование антивирусом, запуск игры итд), музыка начнет стремно "икать". а explorer может "помешать" твоей программе, если только пользователь начнет слишком уж рьяно двигать окнами с полной отрисовкой итп. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Ясно...спасибо
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |