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