Как запустить 100 тыс. горутин

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

Ответ

В Go горутины легковесны (2-4 КБ стека), поэтому 100 тыс. вполне реально. Главное - контролировать ресурсы и синхронизацию. Пример:

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    // Работа горутины
}

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 100000; i++ {
        wg.Add(1)
        go worker(i, &wg)
    }
    wg.Wait()
}

Ключевые моменты:

  1. Используйте sync.WaitGroup для ожидания завершения
  2. Учитывайте лимиты системы (ulimit -n)
  3. Для ограничения параллелизма можно использовать пул воркеров с каналами или semaphore.Weighted
  4. Мониторьте потребление памяти (heap/stack)