Что такое паттерн GMP

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

Ответ

GMP (Goroutine, M, P) — это модель планирования в Go, управляющая горутинами.

  • G (Goroutine) — легковесная сущность, выполняющая код.
  • M (Machine) — поток ОС, который исполняет горутины.
  • P (Processor) — виртуальный процессор, управляющий контекстом выполнения (например, локальной очередью горутин).

Как работает:

  1. Каждый P имеет локальную очередь горутин.
  2. M привязывается к P и выполняет горутины из его очереди.
  3. Если очередь P пуста, он может украсть горутину у другого P (work-stealing).
func main() {
    go func() { fmt.Println("Hello from goroutine!") }() // G создается и планируется P
    time.Sleep(time.Millisecond) // Даем время на выполнение
}

Плюсы:

  • Эффективное использование CPU (меньше блокировок, work-stealing).
  • Масштабируемость на многоядерных системах.