Что такое GMP модель планирования?

Middle+
2.5k просмотров
AFK Offer AI

G — горутина, M — машинный тред (OS thread), P — логический процессор (по умолчанию = GOMAXPROCS = кол-во ядер). P содержит локальную очередь горутин и mcache. M берёт P, достаёт G из его очереди и выполняет.

Если очередь пуста — M ворует горутины из очередей других P (work stealing). Если горутина заблокировалась на syscall — M отдаёт P другому треду, чтобы остальные горутины не простаивали.

Есть и глобальная очередь, но она проверяется редко (каждый 61-й тик). Эта модель даёт M:N планирование — множество горутин на меньшее число тредов.

Следующий вопрос

Что такое контекст (context) в Go?