Что будет работать быстрее, поток или горутина на 8 или 16-ядерном сервере

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

Ответ

Горутина будет эффективнее на многопроцессорных системах благодаря планировщику Go (Goroutine Scheduler), который распределяет горутины по доступным ядрам. Потоки ОС тяжелее (1-2 МБ стека vs 2-8 КБ у горутин) и создают больше накладных расходов при переключении контекста.

Пример:

// Горутины (масштабируются на все ядра)
for i := 0; i < 1000; i++ {
    go worker() // Легковесные
}

// Потоки (ограничены числом ядер)
runtime.GOMAXPROCS(16) // Максимум 16 потоков

На 16 ядрах горутины автоматически распределятся по всем ядрам, тогда как потоки будут ограничены GOMAXPROCS. Разница особенно заметна при большом количестве задач (>10k).