Какой стейт у потока

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

Ответ

В Go нет понятия "потока" (thread) в традиционном смысле, как в других языках. Вместо этого используются горутины (goroutines), которые легковесны и управляются рантаймом Go.

Горутины не имеют собственного стейта в классическом понимании. Они выполняются в контексте планировщика Go, который распределяет их по потокам ОС (обычно 1 поток на ядро CPU).

Ключевые особенности:

  • Горутины стартуют с 2КБ стека (может расти)
  • Состояние определяется точкой выполнения кода и локальными переменными
  • Не привязаны жестко к потоку ОС - планировщик может перемещать их между потоками

Пример:

func main() {
    go func() { // горутина
        fmt.Println("Выполняется в горутине")
    }()
    time.Sleep(time.Millisecond) // даем время на выполнение
}