Программы, как правило, используют одно ядро. Хорошо, если программа не предназначена для использования методов проектирования программного обеспечения, таких как многопоточное распараллеливание. Поскольку некоторые программы используют такую технику, некоторые программы могут переложить часть (но не всю) своей нагрузки на другое ядро ЦП.
Конечно, современные операционные системы достаточно продвинуты, чтобы они могли выполнять несколько задач. Или, более конкретно, несколько частей программ, которые предназначены для идентификации разных потоков, чтобы компьютер (операционная система, процессор и т.д.) Мог помещать разные части программы в разные процессоры.
Короче говоря, точные детали на самом деле становятся довольно сложными и, вероятно, могут изменяться по мере развития аппаратного обеспечения, а также по мере того, как операционные системы меняют стратегии, и компиляторы включают разные оптимизации, а разработчики программного обеспечения используют разные методы. Я не утверждаю, что знаю все сложные детали.
Что я знаю, так это то, что имеет смысл, что вы можете видеть какое-то программное обеспечение, использующее несколько ядер ЦП, в то время как другое программное обеспечение может этого не делать (вообще, или, по крайней мере: так много). Таким образом, вы, вероятно, не воображаете вещи. То, что вы думаете, вы заметили, вероятно, это именно то, что на самом деле происходит.