Ответ
Когда у процессора (CPU) нет задач для выполнения, операционная система переводит его в состояние простоя (idle state) для снижения энергопотребления и тепловыделения.
Это достигается с помощью специальной инструкции, такой как HLT (halt) на архитектуре x86. В этом состоянии процессор прекращает выполнение инструкций до получения следующего прерывания (например, от таймера или устройства ввода-вывода).
Современные процессоры поддерживают более глубокие состояния сна (C-states, от C1 до C-states), которые обеспечивают еще большую экономию энергии, отключая различные компоненты процессора. Чем глубже состояние сна, тем больше времени требуется для "пробуждения".
Какое отношение это имеет к Go?
Go runtime управляет горутинами, распределяя их по потокам ОС. Если в Go-приложении нет готовых к выполнению горутин, планировщик Go может перевести соответствующий поток операционной системы в состояние ожидания. Это, в свою очередь, позволяет ОС перевести физический CPU в состояние простоя, если других задач в системе также нет.
Ответ 18+ 🔞
Да ты посмотри, какая хитрая штука получается! Вот сидит твой процессор, здоровый такой кремень, и вдруг — нихуя не делает. Ну а че ему, дураку, вхолостую крутиться, энергию жечь и греться, как утюг? Правильно, ни к чему.
Операционка, видя такое дело, берет и отправляет его в состояние простоя (idle state). По сути, говорит ему: «Слушай, дружок, приляг, отдохни». А как она это делает? Да через специальную команду, типа HLT на этих ваших x86. Процессор её выполняет и замирает, как впадло, пока его не пнут каким-нибудь прерыванием — от таймера или там мышки.
Ну а современные-то чипы — те вообще мастера по сну! У них целая иерархия этих спячек, C-states называются. C1 — это просто задремал, а вот C6 — это уже «разбудить только апокалипсисом». Чем глубже уснул, тем дольше потом глаза протираешь, но зато и энергии экономишь — овердохуища!
А при чём тут Go, спросишь ты?
А при том, что Go runtime — он ж не лыком шит. Управляет он своими горутинами, раскидывает их по потокам ОС. И если вдруг наступает момент, когда все горутины либо спят, либо ждут — делать-то нехуй! — планировщик Go такой: «Так, братва, тишина в салуне». И отпускает поток ОС в свободное плавание, то есть в ожидание.
А операционка, получив такой подарок, смотрит: ага, поток уснул, других дел на этом ядре тоже нет... И тут же — хуяк! — отправляет физическое ядро процессора в ту самую сладкую дрёму. Экономия, эффективность, все дела. Вот такая, блядь, матрешка получается: горутины -> поток ОС -> ядро CPU. Все друг другу помогают не тратить силы попусту. Умно, ёпта!