Аппаратные потоки (логические ядра) на гиперпоточных процессорах + планировщик - PullRequest
4 голосов
/ 23 июня 2011

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

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

Аппаратный поток = логическое ядро ​​

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

У вас есть только 1 (аппаратный) поток на (логическое) ядро.

Intel мутит воду, выполняя два логических потока на 1 физическом ядре, поэтому ваш вопрос применим только для некоторых процессоров. И Hyper-Threading является сложным, но в основном параллельным.

Что касается нас, программистов, то существуют только логические ядра, запускающие 1 поток за раз.

0 голосов
/ 23 июня 2011

Если вы говорите о процессоре с гиперпоточностью, то этот процессор имеет дополнительные конвейеры выполнения для большей части цикла выполнения. Что касается приложения .net, то да, у вас не будет времени нарезки и блокировки, которые есть у программного потока. Вам все еще нужно убедиться, что ваши операции являются поточно-ориентированными, в противном случае вам нужно будет выполнить собственную блокировку, чтобы не повредить ваши объекты, вызывая их из нескольких потоков одновременно. Быстрый тест для проверки этого состоит в том, чтобы использовать компьютер с гиперпоточностью, порождать некоторые потоки, которые выполняют тяжелые операции с процессором, и смотреть на использование процессора. Если вы видите все виртуальные ядра на 100%, значит, вы золотые.

...