Горутины — что это?

Junior
1.1k просмотров
AFK Offer AI

Горутины — легковесные "зелёные потоки", управляемые Go runtime, а не ОС. Запускаются одним ключевым словом:

go doWork() // запустить функцию в новой горутине

go func() { // анонимная горутина fmt.Println("working") }()

Особенности:

  • Стартовый стек ~2-8 KB (vs ~1 MB у потока ОС), растёт по необходимости
  • Переключение в userspace — дешевле чем syscall для потоков
  • Можно создать миллионы горутин
  • Коммуникация через каналы (channels) и shared memory с мьютексами
Go scheduler использует модель M:N: M горутин мультиплексируются на N потоков ОС. Количество потоков = GOMAXPROCS (по умолчанию = число ядер CPU).

Следующий вопрос

Как работать с транзакциями в Go?