Горутина в Golang — это функция, которая выполняется параллельно с другими функциями. 1 Каждая из них запускается в собственном контексте и работает независимо от других. 4
Механизм работы горутин в Golang включает несколько этапов: 1
- Создание горутины. 2 Для этого к вызову функции добавляют ключевое слово go. 23
- Распределение горутины на свободный поток ОС. 4 Это происходит с помощью планировщика Go, который управляет тремя сущностями: горутинами, машинами и процессорами. 4
- Выполнение горутины. 1 Для каждого логического процессора планировщик достаёт одну горутину из очереди и запускает её в потоке, используя контекст логического процессора. 1
- Системный вызов. 1 Если горутина делает системный вызов, который переводит поток в режим ожидания результата, например, чтение файла, то планировщик создаёт дополнительный поток операционной системы. 1 На нём будут запускаться следующие горутины из очереди до разблокировки основного потока. 1
Главная горутина управляет всеми другими. 3 Если главная горутина завершается, то завершаются и все остальные горутины в сценарии. 3
По умолчанию программа завершает работу, не дожидаясь окончательного выполнения горутин. 1