Как прокомментировал другой пользователь, это в основном зависит от ОС.
если процессор имеет 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
Как же так, если все люди говорят "просто используй темы"? Используется ли многопоточность, привязанная к ядрам? Если да, то как использовать поток, адаптированный к ядру, без вмешательства ОС, если потоки на одноядере не работают одновременно?
Я не понял вопроса здесь, но основная идея с потоками состоит в том, что вы создаете их, и ОС запускается с использованием алгоритма планирования, вам нет необходимости контролировать, в каком логическом или физическом ядре оно будет работать (могут быть случаи Вы можете сделать это, я не уверен, почему).