Поток - это «атомарный» блок с точки зрения управления процессами. Таким образом, вы не можете запускать один поток на нескольких ядрах в том смысле, что в этом потоке одновременно работают несколько ядер .
Но, конечно, программа (процесс) может охватывать два или более потоков, которые точно делают то же самое, или даже дублировать поток, включая все состояние и память, которые у него есть в настоящее время, и позволить копии работать как собственный новый поток. Несколько потоков (независимо от того, выполняют ли они одно и то же, имеют ли они доступ к одинаковому содержимому памяти и имеют ли они одинаковое состояние) могут (и, скорее всего, будут) работать на разных ядрах, если это возможно.
Это не следует путать с перемещением потока . O / S может перемещать определенный поток из ядра, где он в настоящее время работает, в другое ядро в любое время по определенным причинам (например, управление энергопотреблением). В этом смысле один поток может использовать несколько ядер, но при этом он не использует более одного ядра одновременно ; вместо этого он будет «перепрыгивать» с одного ядра на другое, используя одно ядро в любой момент времени.
(Чтобы было проще, я не отличал Hyperthreading от реальных ядер в объяснении выше; я думаю, что это нормально в этом контексте.)