Как многопоточность работает на многоядерном процессоре в Linux ..?

511
pranav

В одном интервью я получил один вопрос: если у меня двухъядерный процессор, могу ли я запускать один поток на обоих процессорах одновременно? По возможности, как это работает.

-1
https://en.wikipedia.org/wiki/Multi-core_processor Mokubai 6 лет назад 0

1 ответ на вопрос

1
Binarus

Поток - это «атомарный» блок с точки зрения управления процессами. Таким образом, вы не можете запускать один поток на нескольких ядрах в том смысле, что в этом потоке одновременно работают несколько ядер .

Но, конечно, программа (процесс) может охватывать два или более потоков, которые точно делают то же самое, или даже дублировать поток, включая все состояние и память, которые у него есть в настоящее время, и позволить копии работать как собственный новый поток. Несколько потоков (независимо от того, выполняют ли они одно и то же, имеют ли они доступ к одинаковому содержимому памяти и имеют ли они одинаковое состояние) могут (и, скорее всего, будут) работать на разных ядрах, если это возможно.

Это не следует путать с перемещением потока . O / S может перемещать определенный поток из ядра, где он в настоящее время работает, в другое ядро ​​в любое время по определенным причинам (например, управление энергопотреблением). В этом смысле один поток может использовать несколько ядер, но при этом он не использует более одного ядра одновременно ; вместо этого он будет «перепрыгивать» с одного ядра на другое, используя одно ядро ​​в любой момент времени.

(Чтобы было проще, я не отличал Hyperthreading от реальных ядер в объяснении выше; я думаю, что это нормально в этом контексте.)

Похожие вопросы