В чём разница между горутиной и потоком ОС?
Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой.
Читать ответПодготовка к интервью
32 вопроса с ответами по теме «Горутины и планировщик Go»
Что проверяют на интервью
Вопросы связывают устройство планировщика Go с практической организацией конкурентной работы. Разборы охватывают очереди, стек и состояния горутин, ожидание результатов, обработку ошибок, ограничение ресурсов и завершение фоновых задач.
Каталог
Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой.
Читать ответУтечки горутин считаются более критичными, чем классические утечки памяти, из-за особенностей их влияния на runtime:
Читать ответЕсли несколько горутин одновременно инкрементируют общий счётчик без синхронизации, то возникают гонки данных — результат может быть непредсказуемым из-за одновременного чтения и записи.
Читать ответПроблема в том, что горутины блокируются на долгих запросах к внешнему API, что приводит к накоплению горутин и росту потребления памяти.
Читать ответВ Go переключение между горутинами происходит автоматически планировщиком рантайма, который распределяет время процессора между ними. Основные способы переключения горутины:
Читать ответMutex (взаимное исключение) в Go блокирует горутину, а не область памяти. Когда горутина пытается захватить mutex, если он уже занят, эта горутина приостанавливается (блокируется) до тех пор, пока mutex не освободится.
Читать ответНет, планировщик не берёт горутину в исполнение сразу после её создания.
Читать ответВ Go горутины могут находиться в разных состояниях, которые отражают их текущий статус в планировщике:
Читать ответОбъем стека у горутины в Go зависит от нескольких факторов:
Читать ответПеременная может быть выделена как в стеке горутины, так и в куче. Это определяется с помощью механизма escape analysis (анализа утечек) компилятора Go.
Читать ответВ планировщике Go P (Processor) — это не физический процессор, а логическая сущность, которая управляет выполнением горутин.
Читать ответПланировщик Go основан на модели MPG (M — Machine, P — Processor, G — Goroutine):
Читать ответ