Ядра и нити? Как все это работает?

1026

Я смущен этим ... если процессор имеет 2 логических ядра, он может запускать две программы на 100% одновременно, да? В противном случае 2 программы на одном процессоре должны быть разделены по времени на 100% (не могут выполняться независимо, поскольку одно и то же одноядерное ядро ​​должно переключаться между контекстами и тому подобным). Если это правда, как происходит совместное использование программ между ядрами и потоками?

Например, скажем, у меня 100 процессов, работающих на 2 ядрах ... ОС попытается разделить 50 на каждое ядро ​​для балансировки нагрузки? Будут ли они случайно разбросаны?

Скажем, я запускаю mspaint.exe на четырехъядерном чипе Intel ... откуда он будет выполняться (ядро 1, 2, 3, 4?) И будет ли он выполняться там до закрытия? По сути, какой логический процессор будет делать с какой программой, и будут ли ядра параллельно обрабатывать различные точки выполнения из ОЗУ при запуске программы?

Кроме того, что если вы использовали 200 потоков с 100 процессами на 4 ядрах ... каждый поток останется между контекстом на ядре с балансировкой нагрузки?

Последний вопрос : действительно ли возможно выбрать конкретное ядро ​​или программу для многоядерных процессоров напрямую, без прозрачного демона или ОС, делающей это случайным образом для вас? Как же так, если все люди говорят "просто используй темы"? Используется ли многопоточность, привязанная к ядрам? Если да, то как использовать поток, привязанный к ядру, без вмешательства ОС, если потоки на одноядерном процессоре не работают одновременно?

0
Вы, вероятно, ищете слишком много уверенности. Есть много различных терминов, летающих вокруг, и часто определения являются немного сумасшедшими. И с точки зрения того, на каком процессоре будет работать отдельное приложение, и будет ли оно всегда одним и тем же, и все ли будет «сбалансированным» (что бы это ни значило на данный момент), это сильно зависит от ОС и конфигурации. Daniel R Hicks 9 лет назад 2
(И очень часто распределение потоков процесса между несколькими процессорами приводит к снижению производительности из-за узких мест производительности, присущих разделяемой памяти.) Daniel R Hicks 9 лет назад 1

1 ответ на вопрос

5
Vinicius Pinto

Как прокомментировал другой пользователь, это в основном зависит от ОС.

если процессор имеет 2 логических ядра, он может запускать две программы на 100% одновременно, да?

Одновременно да, параллельно нет. См .: https://softwareengineering.stackexchange.com/questions/190719/the-difference-between-concurrent-and-parallel-execution

Например, скажем, у меня 100 процессов, работающих на 2 ядрах ... ОС попытается разделить 50 на каждое ядро ​​для балансировки нагрузки? Будут ли они случайно разбросаны?

Каждая ОС имеет свой собственный алгоритм планирования.

Скажем, я запускаю mspaint.exe на четырехъядерном чипе Intel ... откуда он будет выполняться (ядро 1, 2, 3, 4?) И будет ли он выполняться там до закрытия?

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

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

Видимо да: https://stackoverflow.com/questions/663958/how-to-control-which-core-a-process-runs-on

Как же так, если все люди говорят "просто используй темы"? Используется ли многопоточность, привязанная к ядрам? Если да, то как использовать поток, адаптированный к ядру, без вмешательства ОС, если потоки на одноядере не работают одновременно?

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

Похожие вопросы