hostprofi.ru
Подобрать хостинг
Термин·буква П

Поток (thread)

краткое определение

Поток (thread) в контексте процессора — виртуальное ядро, созданное технологией Hyper-Threading (Intel) или SMT (AMD), позволяющее одному физическому ядру CPU обрабатывать два независимых потока инструкций одновременно за счёт дублирования части управляющих схем.

Поток процессора — это логическая единица выполнения инструкций. Один физический CPU с Hyper-Threading (Intel) или SMT (Simultaneous Multithreading, AMD) представляется операционной системе как вдвое большее количество ядер. Процессор с 8 физическими ядрами и HT выглядит в ОС как 16 логических ядер (потоков). В спецификациях VPS и VDS слово «vCPU» чаще обозначает именно поток, а не физическое ядро.

Как работает

Каждое физическое ядро содержит два набора регистров состояния (architectural state) — это позволяет держать контекст двух потоков одновременно. Исполнительные блоки ядра (ALU, FPU, Load/Store) при этом общие. Пока один поток ожидает данных из памяти (pipeline stall), второй поток использует освободившиеся исполнительные блоки. Прирост производительности от HT обычно 15–30% в многопоточных нагрузках.

В серверных процессорах Intel Xeon и AMD EPYC потоки особенно важны: сервер с 2 × 32-ядерными EPYC 9654 имеет 128 физических ядер и 256 логических потоков. CPU pinning позволяет привязать поток конкретной VM к конкретному физическому потоку для предсказуемой производительности.

История

SMT (Simultaneous Multithreading) предложена исследователями University of Washington в 1995 году. Intel реализовала Hyper-Threading в Pentium 4 Xeon в 2002 году, а в 2004 году добавила в настольные Pentium 4. AMD применила SMT в архитектуре Zen (Ryzen и EPYC) в 2017 году. В 2018 году исследователи обнаружили уязвимости MDS/L1TF, позволявшие потокам одного ядра «читать» данные друг друга — это привело к дискуссии об отключении HT в высокозащищённых средах.

Потоки в хостинге

  • 1 vCPU на VPS обычно = 1 поток (не физическое ядро)
  • При CPU pinning поток фиксируется за конкретной VM
  • Без pinning потоки конкурируют — возникает шум соседей (noisy neighbor)
  • В NUMA-архитектуре потоки одного физического чипа расположены в одном NUMA-узле

На что обращать внимание

При выборе VPS: уточняйте, являются ли заявленные vCPU потоками или физическими ядрами. Некоторые хостеры честно пишут «vCPU = 1 физическое ядро», другие дают потоки. Для CPU-intensive задач (компиляция, шифрование) разница существенна: 4 физических ядра > 4 потока при высокой нагрузке.

Потоки и хостинг

Количество потоков CPU напрямую влияет на многозадачность сервера. PHP-FPM создаёт один рабочий процесс на каждый запрос — при 50 одновременных запросах нужно 50 рабочих процессов. Каждый процесс занимает отдельный поток. Гиперпоточность (Hyper-Threading/SMT) увеличивает число логических потоков в 2 раза, но не даёт двукратного прироста производительности — физические ядра всё равно делят ресурсы ALU. Для задач с интенсивными вычислениями (трансформация видео, ML-инференс) предпочтительны серверы без HT — меньше накладных расходов на переключение контекста.

История понятия "поток"

Концепция потока (thread) появилась в операционных системах 1960-х годов. В UNIX-подобных системах потоки реализованы через pthreads (POSIX threads, стандартизованы в 1995 году). Intel внедрила Hyper-Threading (HTT) в Pentium 4 Xeon в 2002 году. AMD реализовала аналогичную технологию (SMT) в процессорах EPYC в 2017 году. Поток как единица планирования отличается от процесса: потоки одного процесса разделяют память, процессы изолированы.

На что обращать внимание

При выборе VPS или выделенного сервера: уточните, выделяются ли vCPU на физические ядра (pinning) или используется оверкоммит. Сервер с 4 vCPU на оверкоммите 4:1 хуже, чем 2 реальных ядра без оверкоммита. Для баз данных критична однопоточная производительность (single-thread score в Geekbench), для веб-сервера под многопользовательскую нагрузку важен многопоточный.

Другие термины