Что знаешь про runtime в Go

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

Ответ

Go runtime — это часть языка, отвечающая за управление памятью (сборщик мусора), горутинами, планировщиком и низкоуровневыми операциями.

Ключевые аспекты:

  • Goroutines — легковесные потоки, управляемые runtime (не ОС).
  • Scheduler — использует M:N модель (горутины на системных потоках).
  • GC — concurrent mark-and-sweep, минимизирующий паузы.
  • Memory management — автоматическое выделение/освобождение.

Пример работы с runtime:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    fmt.Println("GOMAXPROCS:", runtime.GOMAXPROCS(0)) // Текущее кол-во потоков
    go func() { fmt.Println("Goroutine") }()
    runtime.Gosched() // Дать шанс другим горутинам
}

Важно: Прямое взаимодействие с runtime (например, runtime.KeepAlive) требуется редко — большинство задач абстрагировано.