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

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

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

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

решение1

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

решение2

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

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

решение3

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

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

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

решение4

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

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

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

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

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

Связанный контент