Сколько может быть реплик

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

Ответ

В Go можно создавать неограниченное количество реплик (горутин), но их реальное количество ограничено ресурсами системы (память, CPU).

Пример:

package main

import (
    "fmt"
    "time"
)

func worker(id int) {
    fmt.Printf("Worker %d startedn", id)
    time.Sleep(time.Second)
    fmt.Printf("Worker %d donen", id)
}

func main() {
    for i := 0; i < 100000; i++ {
        go worker(i) // Запуск 100k горутин
    }
    time.Sleep(2 * time.Second) // Даем время на выполнение
}

Нюансы:

  • При слишком большом количестве горутин возможны утечки памяти и деградация производительности.
  • Лучше использовать пулы воркеров (например, sync.WaitGroup, semaphore.Weighted).
  • На практике десятки тысяч горутин уже могут создать нагрузку.