Предоставление управления потоку с всегда более низким приоритетом - PullRequest
0 голосов
/ 04 августа 2011

Это общий вопрос. Рассмотрим сценарий, в котором у нас есть несколько потоков с различной степенью приоритетов. теперь в таком сценарии поток с самым низким приоритетом никогда не получит контроль над ресурсами, так как share всегда будет идти к потоку с самым высоким приоритетом. В любом случае, можно ли обойти потоки с более высоким приоритетом и предоставить ресурсы потоку с более низким приоритетом?

Ответы [ 4 ]

0 голосов
/ 04 августа 2011

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

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

0 голосов
/ 04 августа 2011

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

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

Это ответственность планировщика - Википедия: Планирование

0 голосов
/ 04 августа 2011

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

Если вы думаете сделать это на языке программирования, просто измените приоритет потока, чтобы онможет добиться большего прогресса при каждом запуске.Обычно у вас есть потоки с низким приоритетом для фоновых событий, которые не очень критичны по времени, или вы не хотите, чтобы поток занимал столько же времени, сколько более важный поток.

0 голосов
/ 04 августа 2011

Встроенный механизм для этого является приоритетом потока. Устанавливая низкий приоритет для потока, вы сообщаете операционной системе, что ее активность «менее важна», и, следовательно, если потоки, которые более важны (имеют более высокий приоритет), должны выполняться, эти потоки имеют приоритет.

Если вы не хотите, чтобы поток потенциально не имел процессорного времени, то он не должен быть потоком с низким приоритетом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...