Глава 9. Планировщик горутин
- 9.1 Проблема планирования и модель GMP
- 9.2 Планирование с перехватом работы (Work-Stealing)
- 9.3 Модель MPG и единицы конкурентного планирования
- 9.4 Цикл планирования
- 9.5 Управление потоками
- 9.6 Обработка сигналов
- 9.7 Кооперация и вытеснение
- 9.8 Системный мониторинг
- 9.9 Сетевой поллер
- 9.10 Таймеры
- 9.11 Осведомленность о NUMA и будущее планировщика
(Управление стеком выполнения первоначально относилось к этой главе; теперь оно перенесено в Главу 14. Управление стеком выполнения.)
С точки зрения автора, планировщик Go — самый увлекательный компонент во всем рантайме.
Для самого Go его дизайн и реализация напрямую влияют на все остальные компоненты рантайма, и это та часть, которая напрямую взаимодействует с кодом пользовательского пространства.
Для пользователей Go планировщик скрывает чрезвычайно сложный механизм рантайма за одним простым ключевым словом go.
Чтобы гарантировать высокую производительность, планировщик должен эффективно использовать параллелизм и локальность вычислений; чтобы сохранить простоту пользовательского пространства, планировщик должен эффективно управлять сетевым поллером и сборщиком мусора, которые невидимы для кода пользовательского пространства; чтобы гарантировать корректность выполнения кода, он также должен строго реализовывать порядок памяти пользовательского пространства и так далее.
Короче говоря, дизайн планировщика напрямую определяет то, в каком виде представлен исходный код рантайма Go.