Почему одному ядру полезен второй поток

Физическое ядро — это набор вычислительных блоков, которые выполняют команды: например, арифметические операции и загрузку данных из памяти. Но в каждый момент часть этих блоков может простаивать. Процессор часто ждёт, пока данные придут из оперативной памяти, или пока завершится операция, от которой зависят следующие команды.

Технология одновременной многопоточности (SMT; у Intel она известна как Hyper-Threading) позволяет ядру хранить состояние двух потоков инструкций. Поток — это последовательность команд программы. Когда один поток временно не может использовать вычислительные блоки, ядро может занять их командами другого.

Что именно получает операционная система

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

Однако это не два независимых физических ядра. Потоки делят важные ресурсы одного ядра, включая вычислительные блоки и доступ к кэшу — быстрой памяти рядом с процессором. Если обе задачи одновременно требуют одних и тех же ресурсов, они конкурируют за них.

Почему скорость не удваивается

Второй поток особенно полезен, когда первый часто простаивает, ожидая данные или завершения операций. Тогда работа, которая иначе задержалась бы, продвигается параллельно. Но если оба потока непрерывно нагружают одни и те же блоки, прирост будет небольшим, а иногда совместная работа может оказаться неэффективной.

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