Аппаратные потоки (логические ядра) на гиперпоточных процессорах + планировщик
Я знаю, что программные потоки получают определенное количество времени для выполнения, и каждый программный поток выполняет по очереди выполнение этого блока времени, но они не выполняются одновременно (в одном аппаратном потоке).
Мой вопрос заключается в том, что, когда у вас есть 2 или более аппаратных потоков на ядро, каждый аппаратный поток запускается одновременно на этом ядре или аппаратные потоки получают блоки времени для исполнения, как программные потоки, играя в игру циклического перебора?
Аппаратный поток = логическое ядро
2 ответа
У вас есть только 1 (аппаратный) поток на (логическое) ядро.
Intel мутит воду, выполняя два логических потока на 1 физическом ядре, поэтому ваш вопрос применим только для некоторых процессоров. И Hyper-Threading является сложным, но в основном параллельным.
Что касается нас, программистов, то существуют только логические ядра, запускающие 1 поток за раз.
Если вы говорите о процессоре с гиперпоточностью, то этот процессор имеет дополнительные конвейеры выполнения для большей части цикла выполнения. Что касается приложения.net, то да, у вас не будет времени нарезки и блокировки, которые есть у программного потока. Вам все еще нужно убедиться, что ваши операции являются поточно-ориентированными, в противном случае вам нужно будет выполнить собственную блокировку, чтобы не повредить ваши объекты, вызывая их из нескольких потоков одновременно. Быстрый тест для проверки этого состоит в том, чтобы использовать компьютер с гиперпоточностью, порождать некоторые потоки, которые выполняют тяжелые операции с процессором, и смотреть на использование процессора. Если вы видите все виртуальные ядра на 100%, то вы золотой.