Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой. В отличие от потоков ОС, горутины занимают гораздо меньше памяти (обычно несколько килобайт стека, который может динамически расти и уменьшаться), и их создание и переключение гораздо дешевле по ресурсам.
В чём разница между горутиной и потоком ОС?
Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой. В отличие от потоков ОС, горутины занимают гораздо меньше памяти (обычно несколько килобайт стека, который может динамически расти и уменьшаться), и их создание и переключение гораздо дешевле по ресурсам.
Основные отличия от потоков ОС:
- Горутины планируются и управляются Go-рантаймом, а не ОС.
- Могут быть тысячи и десятки тысяч горутин в одном процессе без значительной нагрузки.
- Переключение контекста между горутинами происходит быстрее, так как не требует переключения ядра.
Управление горутинами осуществляет Go-рантайм, который содержит собственный планировщик (M:N scheduler), сопоставляющий множество горутин (G) с меньшим числом потоков ОС (M). Это позволяет эффективно использовать системные ресурсы и упрощает параллельное программирование.