Как обеспечивается справедливость планирования потоков между процессами? - PullRequest
0 голосов
/ 28 декабря 2018

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

Так что, если в системе работают два процесса -P1 с 1 потоком и P2 с 100 потоками, как алгоритм планирования ОС обеспечит, чтобы и P1, и P2 получали примерно одинаковое количество процессорного времени?Если ОС слепо планирует потоки, P2 получит в 100 раз больше процессорного времени, чем P1.

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

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

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

Обратите внимание, что в любом случае это все шуточная шутка.Например, если один поток получает 10 мс времени на процессоре, который работает медленно из-за теплового регулирования (и / или потому, что другой логический ЦП в том же ядре занят), а другой поток получает 10 мс времени на процессоре, которыйработает быстрее, чем обычно (например, из-за «турбонаддува» и / или потому, что другой логический процессор в ядре не используется);затем эти потоки получили равное количество процессорного времени, но не получили ничего, что можно было бы считать «справедливым» (поскольку один поток мог бы получить в 20 раз больше работы, чем другой).

Примечаниечто это все равно нежелательно.Например, для хороших потоков ОС будет дан приоритет, указывающий, насколько важна работа, которую они выполняют, и вы не хотите, чтобы поток с высоким приоритетом (выполняющий очень важную работу) получал такую ​​же «справедливую долю» процессорного временикак поток с низким приоритетом (выполнение неактуальной / неважной работы).В случаях, когда два потока имеют одинаковый приоритет, вы (теоретически) хотите, чтобы они получали «равное» количество процессорного времени;но на практике это не часто, и потоки блокируют и разблокируют так часто, что об этом не стоит беспокоиться;и на практике это может привести к сценариям «две половины выполненных работ вместо одной выполненной работы и одной незапущенной работы», что увеличивает среднее количество времени, которое требуется работе (например, запросу на работу).

0 голосов
/ 29 декабря 2018

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

Неправильный вопрос.Рассмотрим две задачи, которые пытаются решить одну и ту же проблему, выполняя одну и ту же работу, и полностью идентичны, за исключением одной вещи: одна использует десятки потоков, другая - десятки процессов.Почему тот, который использует десятки процессов, получает больше процессорного времени, чем тот, который использует десятки потоков?

Ваше представление о справедливости не совсем разумное.

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

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

0 голосов
/ 28 декабря 2018

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

При планировании типа VMS процесс с большим количеством потоков получает больше ЦП по своей конструкции.Лучше для приложения использовать больше потоков и для него использовать больше процессов.

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

...