Skip to content
1 / 15

Горутины: чем отличаются от потоков операционной системы и сколько их можно

Горутина — не поток операционной системы, а функция, исполнением которой управляет планировщик самого Go. Отличие в цене: поток ОС стартует с фиксированным стеком в мегабайты и переключается через ядро, а горутина начинается с нескольких килобайт стека, который растёт по мере надобности, и переключается в пространстве пользователя. Поэтому счёт горутин идёт на сотни тысяч там, где потоков хватило бы на тысячи. Планировщик раскладывает горутины по ограниченному числу потоков ОС — их столько, сколько задаёт GOMAXPROCS, по умолчанию равный числу доступных процессоров, а начиная с Go 1.25 учитывающий и лимит cgroups в контейнере. Ключевое, о чём забывают: go f() ничего не гарантирует про порядок и момент запуска, а main при завершении не ждёт никого — нужна явная синхронизация. И горутины не бесплатны: миллион горутин — это гигабайты стеков и заметная работа планировщика.

Горутины: чем отличаются от потоков операционной системы и сколько их можно | JScriptiser