Легковесные потоки выполнения, управляемые средой выполнения Go. Они создаются ключевым словом go перед вызовом функции.
Основные характеристики:
- Меньший расход памяти: Горутина начинается с малым размером стека (обычно 2 КБ), который может динамически увеличиваться или уменьшаться.
- Более быстрое создание: Создание горутины намного быстрее, чем создание системного потока.
- Мультиплексирование на системные потоки: Множество горутин могут быть мультиплексированы на меньшее количество системных потоков runtime планировщиком Go.
- Кооперативное планирование: Горутины не вытесняются принудительно; они добровольно уступают управление планировщику (например, при блокирующих вызовах или явных вызовах
runtime.Gosched()).
Пример создания:
go
Сравнение с потоками:
| Признак | Горутины Go | Потоки ОС |
|---|
| Управление | Среда выполнения Go | Операционная система |
| Расход памяти | Низкий, динамический стек | Высокий, фиксированный стек |
| Создание | Быстрое | Медленное |
| Планирование | Кооперативное | Вытесняющее |
| Синхронизация | Каналы, sync пакет | Мьютексы, семафоры ОС |