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