Можно ли заблокировать горутину на определённый тред

«Можно ли заблокировать горутину на определённый тред» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go нет прямого способа привязать горутину к конкретному системному треду. Планировщик Go сам управляет распределением горутин по потокам ОС (M в модели GMP).

Однако есть косвенные способы влияния:

  1. runtime.LockOSThread() - привязывает текущую горутину к текущему треду ОС до вызова UnlockOSThread()
go func() {
    runtime.LockOSThread()
    defer runtime.UnlockOSThread()
    // Этот код будет выполняться в одном системном треде
}()
  1. runtime.GOMAXPROCS(1) - ограничивает количество потоков ОС, что может помочь в тестах или специфичных сценариях.

Важно: такое закрепление обычно нужно только для интеграции с C-кодом или специфичными системными вызовами, в большинстве случаев доверьте планировщику Go управление потоками.