В чем разница между горутиной и потоком

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

Ответ

Горутины — это легковесные потоки выполнения в Go, управляемые рантаймом, а не ОС. Они работают в рамках одного системного потока (по умолчанию), потребляют меньше памяти (~2 КБ стека) и быстро переключаются.

Потоки (threads) — это тяжеловесные сущности ОС, занимают больше памяти (~1 МБ стека) и создаются/управляются ядром.

Пример:

func main() {
    go func() { fmt.Println("Горутина") }() // Легковесная
    time.Sleep(time.Millisecond)
}

Ключевые отличия:

  • Горутины дешевле создавать и переключать.
  • Горутины работают в рамках M:N потоков (много горутин на мало потоков).
  • Горутины используют каналы для безопасной коммуникации, потоки — мьютексы.