Вопрос проверяет понимание модели конкурентности Go и работы runtime.
Goroutine — это легковесная единица выполнения, управляемая runtime Go, а не операционной системой. Она потребляет меньше памяти и создается быстрее, чем поток. Планировщик Go распределяет goroutine по системным потокам. Благодаря этому можно запускать тысячи goroutine.
Goroutine — это абстракция над системными потоками.
Определение:
Goroutine — это функция, выполняемая конкурентно и управляемая планировщиком Go runtime.
Размер стека
Goroutine: несколько килобайт, растет динамически.
Поток: обычно мегабайты.
Стоимость создания
Goroutine создается очень быстро.
Поток создается через ОС, что дороже.
Планирование
Потоки планирует ОС.
Goroutine планирует runtime Go.
Go использует модель:
G — goroutine
M — системный поток
P — процессор планировщика
Многие goroutine выполняются на меньшем числе потоков.
Это дает:
Высокую масштабируемость.
Эффективную работу с I/O.
Простую модель конкурентности.
Goroutine легче, дешевле и управляется runtime, тогда как поток — тяжелая единица выполнения, управляемая операционной системой.