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

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

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

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

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

1 ответ1

5

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

если процессор имеет 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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .