Распределяет ли ОС каждый процесс по отдельному ядру?

15

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

Однако на уровне ОС кажется очевидным, что ОС будет разделять процессы по различным ядрам. Разве это не было бы аргументом для получения большего количества ядер? Разве это не помогает во многих ситуациях? Вы выполняете несколько задач с интенсивным использованием процессора - каждый из этих процессов может загружать 100% своих ядер, но я все еще могу просматривать веб-страницы и задавать вопросы по SuperUser на моем последнем ядре… правильно?

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

Ответы:

12

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

heavyd
источник
Ключевое слово здесь - если у вас несколько приложений с интенсивным использованием процессора - это необычная ситуация для большинства пользователей.
Жиль "ТАК - перестать быть злым"
Спасибо за ответ. Да, последний случай - это то, что я пытаюсь описать.
Даг Т.
3

Чтобы добавить к ответу @ heavyyd, причина этого в том, что ОС не может определить, какие части процесса разрешены для параллельной работы, а какие - нет. Если программа не предназначена для работы на параллельных ядрах, в приложении могут быть подпрограммы, предназначенные для одновременной работы в последовательном режиме. Это может вызвать всевозможные проблемы (например, если 2 подпрограммы используют один и тот же блок памяти, но не предназначены для одновременной работы).

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

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

Когда дело доходит до этого, не имеет значения, используется ли процессор на 1% или на 95% (если он стабилен на 95% и не достигает пика), программы будут работать с той же скоростью, пока это не бьет 100%. Неиспользованные циклы ЦП просто напрасны.

Из-за этого Windows 7 (на совместимых процессорах) имеет технологию, известную как «парковка ядра», которая в основном отключает неиспользуемые ядра на вашем компьютере для экономии электроэнергии.

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

Уильям Хилсум
источник
2

Ваши начальные чувства верны - есть отрицательный уклон к нескольким ядрам, и это не совсем то, что заслуживает.

В те времена, когда большинство пользователей использовали свои настольные ПК только для простой обработки текста, возможно, был спор. Но в наши дни такие вещи, как браузеры с несколькими вкладками, каждая в своем собственном процессе (chrome и т. Е. Выполняют разделение на уровне процессов для вкладок), а также такие вещи, как видеодекодеры на веб-страницах и дополнительные задачи, которые можно легко выгружать, как на лету рендеринг эффектов aka css3, даже один браузер может оправдать причину гораздо большего количества оперативной памяти и нескольких ядер.

Добавьте к этому тот факт, что некоторые пользователи также могут играть в игры на этом ПК или использовать такие инструменты, как garageband, imovie, handbrake, несколько ядер, может быть огромным преимуществом.

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

В принципе, вы правы, но какое количество ядер самое эффективное? 2? 4? 12? Скорее всего, это будет зависеть от привычек пользователей ... Я склоняюсь к этому 2-4 для большинства пользователей, но я только догадываюсь.

обкрадывать
источник