Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> установка приоритета потока, В области одной программы 
V
    Опции темы
azesmcar
Дата 20.3.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Здравствуйте,

Есть процесс с несколькими потоками, который будет работать на отдельном сервере.. Каждый поток по сущности выполняет схожую с остальными но отдельную задачу. Появилась мысль ускорить скорость работы программы за счет приоритетов. Меня заинтересовал такой вопрос. Если повысить приоритеты всех потоков, что нибудь изменится? Как виндоуз распределяет приоритеты? Для потоков всей системы или конкретно для одного процесса? Тоесть если изменить приоритеты всех потоков они все начнуть получать (больше/чаще) процессорного времени за счет остальных потоков в системе или же будут это делать за счет остальных потков в моем процессе?

Спасибо
PM   Вверх
Greeen
Дата 20.3.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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.


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Tectoder
Дата 20.3.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



Есть два понятия - класс приоритета процесса и уровень приоритета потока.
Исхожя из этих двух величин у каждого потока появляется величина, называемая "действующий(базовый) приоритет". Данная величина и определяет насколько много времени данный поток будет получать по сравнению с другими потоками в системе(в независимости от того, какому процессу принадлежат иные потоки).
Что бы увеличить время, выдаваемое потокам(читай, базовый приоритет) можно как увеличивать класс приоритета процесса, так и увеличивать уровень приоритета потока. При этом(грубо говоря) класс приоритета процесса имеет большую важность, чем приоритет потока.

Добавлено @ 16:50 
Также вот здесь можно почитать: http://msdn2.microsoft.com/en-us/library/ms685100.aspx
(ёмоё, уже ответили)

Добавлено @ 16:54 
Цитата(Greeen @  20.3.2007,  16:46 Найти цитируемый пост)
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. 
Довольно странная фраза, кстати. В первом предложении говорилось про некоторый "уровень" который получается комбинацией thread priority и process class. А в третьем(процитированном) говорится явно об IRQL, а вовсе не о priority level.
PM   Вверх
azesmcar
Дата 20.3.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата

Есть два понятия - класс приоритета процесса и уровень приоритета потока.
Исхожя из этих двух величин у каждого потока появляется величина, называемая "действующий(базовый) приоритет". 


Это мне известно...честно говоря я это все читал..и в MSDN -е и в Рихтере...я не смог найти ответ на вопрос
Цитата

Как виндоуз распределяет приоритеты? Для потоков всей системы или конкретно для одного процесса?


Цитата

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


Т.е. получается и то и другое повысит производительность программы?
К примеру если у меня 3 потока..каждый из них получает 20 мс процессорного времени..и за это время делает 5 операций...
теперь я повышаю приоритет всех трех потоков...каждый из них станет получать 40 мс процессорного времени и будет делать 10 операций...
т.е. в общем производительность программы не изменится. Так получается? Или же виндоуз станет уделять меньше внимания остальным потокам всей системы (других процессов) и будет уделять это время моим потокам..?

Это сообщение отредактировал(а) azesmcar - 20.3.2007, 17:03
PM   Вверх
Tectoder
Дата 20.3.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



Цитата(azesmcar @  20.3.2007,  17:01 Найти цитируемый пост)
Т.е. получается и то и другое повысит производительность программы?
На моей ссылке есть табличка, которая показывает насколько то и это влияет на итоговый приоритет ;) 
Цитата(azesmcar @  20.3.2007,  17:01 Найти цитируемый пост)
Или же виндоуз станет уделять меньше внимания остальным потокам всей системы (других процессов) и будет уделять это время моим потокам..?
Вероятно именно так. До определенного момента. Но ситуации когда твоя программа будет потреблять совсем все ресурсы системы все равно не произойдет.

Это сообщение отредактировал(а) Tectoder - 20.3.2007, 17:12
PM   Вверх
dumb
Дата 20.3.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



Цитата(azesmcar @  20.3.2007,  17:01 Найти цитируемый пост)
Для потоков всей системы или конкретно для одного процесса?

для потоков всей системы.
PM MAIL   Вверх
azesmcar
Дата 20.3.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата

Вероятно именно так. До определенного момента. Но ситуации когда твоя программа будет потреблять совсем все ресурсы системы все равно не произойдет.


А мне это и не нужно...мне просто нужно чтобы они работали чуть быстрее чем скажем Explorer.exe...вопрос в том если виндоуз будет распределять приоритеты внутри процесса мне это ничего не даст...точнее даст только тогда когда мне будет нужно чтобы один из моих потоков работал медленее чем остальные..а мне этого не нужно...

Цитата

для потоков всей системы. 


Коротко и точно smile спасибо +1

Итог. Чтобы заставить программу работать быстрее нужно повысить класс приоритета процесса и относительный приоритет потоков...
Верно?

PM   Вверх
dumb
Дата 21.3.2007, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



"быстрее" - наверное не самое правильное слово...

Цитата(azesmcar @  20.3.2007,  17:24 Найти цитируемый пост)
Чтобы заставить программу работать быстрее нужно повысить класс приоритета процесса и относительный приоритет потоков...
Верно?

чтобы программа получала больше процессорного времени, нужно либо повысить класс приоритета процесса, либо приоритет всех/нужных потоков, либо и то, и другое. потому как итоговый приоритет потока является суммой класса приоритета процесса и приоритета потока.

тебе imho стоит ограничиться SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);

ps. btw сильно сомневаюсь, что это даст ощутимый прирост производительности программы.
PM MAIL   Вверх
azesmcar
Дата 21.3.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата

ps. btw сильно сомневаюсь, что это даст ощутимый прирост производительности программы. 


Почему? Если это не дает ощутимого прироста то зачем вообще нужны приоритеты?
PM   Вверх
dumb
Дата 21.3.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



Цитата(azesmcar @  21.3.2007,  10:17 Найти цитируемый пост)
Почему? Если это не дает ощутимого прироста то зачем вообще нужны приоритеты?

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

как пример "нужности" приоритетов можно привести, например, winamp - если поставить ему приоритет ниже обычного(или оставить обычный на слабой машине), то в момент какой-либо ощутимой нагрузки на проц(сканирование антивирусом, запуск игры итд), музыка начнет стремно "икать". smile

а explorer может "помешать" твоей программе, если только пользователь начнет слишком уж рьяно двигать окнами с полной отрисовкой итп.  smile 
PM MAIL   Вверх
azesmcar
Дата 21.3.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Ясно...спасибо
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.