Потоки выполняются на процессоре или ядре? - PullRequest
0 голосов
/ 01 августа 2020

Я новичок в многопоточности. Так много новых концепций. Может кто-нибудь дать небольшое объяснение между ядром и процессором? Я пробовал поискать в Google, и это не сильно помогло.

Итог, выполняется ли однопоточный процесс на одном ядре или одном процессоре?

Кроме того, у меня есть i7. Он говорит, что у меня 4 ядра, но 8 потоков. Разве ядро ​​не связано с потоком в пропорции 1-1? Как это удвоилось?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 01 августа 2020

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

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

«поток» в этом контексте (примечание: термин «поток», используемый в большинстве контекстов программирования, связан, но отличается ) - это путь выполнения кода со своим собственным набором регистров. Ядро предоставляет один или несколько потоков. Однако, если ядро ​​ЦП предоставляет несколько потоков (обычно только 2), ожидается, что потоки будут конкурировать друг с другом за ресурсы выполнения.

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

А иногда операции просто завершают поток. Выборки из памяти часто могут остановить поток на своем пути, чтобы дождаться данных из ОЗУ. В это время второй поток в ядре будет получать ядро ​​до тех пор, пока не будут получены данные.

1 голос
/ 02 августа 2020

Это распространенное заблуждение. Есть два вида потоков: программные и аппаратные. При написании многопоточных программ Вы говорите о программных потоках. Говоря о 4 (физических) ядрах с 8 (логическими) HT (Hyper-thread) ядрами, вы говорите об аппаратных потоках. Количество активных программных потоков может составлять 1000, которые планируются операционной системой (ОС) с привязкой по времени, на ограниченном количестве аппаратных потоков.

1 голос
/ 01 августа 2020

Когда разработчики процессоров Intel начали разрабатывать ядра, которые могли имитировать 2 ядра (трюк, который иногда позволяет лучше использовать ограниченную емкость кэша, чем одно ядро), они решили использовать слово «поток» для их описания. С таким же успехом они могли выбрать вместо этого «виртуальное ядро», но не сделали этого. Затем они вставили слово «гипер» перед… ну, я не знаю почему. Термин Hyperthread просто раздражает из-за путаницы, которую он вызывает с потоками ОС, что совсем другое дело.

Другие процессоры делали это раньше. Inmos Transputer мог имитировать множество ядер, но обычно их считали «процессами», хотя их мотивация не имела ничего общего с эффективным использованием кеша (он был предназначен для поддержки языка, который мы использовали на них, Occam, который был реализация взаимодействующих последовательных процессов, что внезапно снова стало модным в таких языках, как Go, Rust).

...