Расскажи про модель GMP в Go. Как работают очереди, что такое handoff, work stealing, netpoller?
Answer from AI
sobes.tech AI
Модель GMP в Go — это основа планировщика горутин, где:
- G (goroutine) — это легковесный поток выполнения.
- M (machine) — это системный поток ОС, на котором выполняются горутины.
- P (processor) — это логический процессор, который связывает G и M, управляет выполнением горутин.
Каждый P имеет очередь горутин (run queue), куда помещаются готовые к выполнению G. M берёт G из очереди P и запускает их.
Handoff — это механизм передачи горутины от одного M к другому без помещения в глобальную очередь, чтобы минимизировать задержки.
Work stealing — когда P заканчивает свои горутины, он может «украсть» задачи из очередей других P, чтобы равномерно распределить нагрузку.
Netpoller — это внутренний механизм, который отслеживает сетевые события (например, готовность сокетов) и пробуждает соответствующие горутины для обработки.
Таким образом, модель GMP обеспечивает эффективное и масштабируемое планирование горутин с минимальными накладными расходами.