Я смущен этим ... если процессор имеет 2 логических ядра, он может запускать две программы на 100% одновременно, да? В противном случае 2 программы на одном процессоре должны быть разделены по времени на 100% (не могут выполняться независимо, поскольку одно и то же одноядерное ядро должно переключаться между контекстами и тому подобным). Если это правда, как происходит совместное использование программ между ядрами и потоками?
Например, скажем, у меня 100 процессов, запущенных на 2 ядрах ... ОС попытается разделить 50 на каждое ядро для балансировки нагрузки? Будут ли они случайно разбросаны?
Скажем, я запускаю mspaint.exe на четырехъядерном чипе Intel ... откуда он будет выполняться (ядро 1, 2, 3, 4?) И будет ли он выполняться там до закрытия? В основном, какой логический процессор будет делать с какой программой, и будут ли ядра параллельно обрабатывать различные точки выполнения из ОЗУ при запуске программы?
Кроме того, что если вы использовали 200 потоков с 100 процессами на 4 ядрах ... каждый поток останется между контекстом на ядре с балансировкой нагрузки?
Последний вопрос: действительно ли возможно выбрать конкретное ядро или программу для многоядерных процессоров напрямую, без прозрачного демона или ОС, делающей это случайным образом для вас? Как же так, если все люди говорят "просто используй темы"? Используется ли многопоточность, привязанная к ядрам? Если да, то как использовать поток, привязанный к ядру, без вмешательства ОС, если потоки на одноядерном процессоре не работают одновременно?