Как горутина связана с операционным тредом

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

Ответ

Горутина — это легковесный поток выполнения в Go, управляемый рантаймом, а не ОС напрямую.

  • Соотношение: Горутины мультиплексируются на небольшое количество ОС-тредов (обычно равное количеству CPU ядер). Планировщик Go распределяет горутины по тредам.
  • Преимущество: Переключение между горутинами дешевле, чем между тредами ОС, так как происходит в пользовательском пространстве.
  • Блокировка: Если горутина блокируется (например, на I/O), планировщик запускает другие горутины на этом же треде.
func main() {
    go func() { // горутина
        fmt.Println("Hello from goroutine")
    }()
    time.Sleep(time.Millisecond) // даем горутине время выполниться
}