Skip to content

Анатомия Go: Как работает планировщик горутин на самом деле

By Николай Тузов — Golang · more summaries from this channel

1 hr 54 min video·ru··112540 views

This is an AI-generated summary of Анатомия Go: Как работает планировщик горутин на самом деле — a 1 hr 54 min YouTube video by Николай Тузов — Golang, published March 2, 2025. It condenses the full transcript into 10 key takeaways with clickable timestamps.

Summary

Этот ролик подробно разбирает внутреннее устройство планировщика Go, объясняя его эволюцию от базовых концепций конкурентности до сложных механизмов управления горутинами, тредами и системными вызовами для достижения эффективной и дешевой параллельной работы.

Key Points

  • Понимание внутренних механизмов планировщика Go критически важно для оптимизации кода, особенно при работе с I/O-bound, CPU-bound задачами, файлами и сетью. 
  • Go-планировщик разработан для обеспечения дешевой и эффективной конкурентной работы, максимально задействуя ядра процессора и упрощая асинхронное выполнение задач. 
  • Планировщик Go реализует модель M:N, где множество горутин выполняются на ограниченном количестве системных тредов, что позволяет создавать тысячи горутин с минимальными накладными расходами. 
  • Go использует концепцию горутин — легковесных "пользовательских" тредов, управляемых планировщиком Go, в отличие от системных тредов, управляемых операционной системой. 
  • Механизм "Work Stealing" позволяет простаивающим процессорам забирать половину работы из локальных очередей других, более загруженных процессоров, обеспечивая балансировку нагрузки. 
  • Для эффективного распределения работы и минимизации блокировок, планировщик использует модель GMP (Goroutine, Machine, Processor) с локальными очередями (LRQ) для каждого процессора и глобальной очередью (GRQ). 
  • Для обработки блокирующих системных вызовов (например, работа с файлами), Go использует механизм "Hand-off", создавая новый системный тред для выполнения других горутин, пока заблокированный тред ожидает. 
  • Сетевые операции и другие неблокирующие системные вызовы обрабатываются через "Network Poller", который позволяет горутинам ожидать ответа, не блокируя системные треды и не создавая новые. 
  • System Monitor (SimoN) играет ключевую роль в планировщике, отслеживая время выполнения горутин, инициируя Hand-off для долгих syscall'ов и перемещая долго ожидающие горутины из Network Poller'а в GRQ. 
  • Планировщик Go является кооперативным, но с версии 1.14 включает элементы вытесняющей многозадачности, позволяя принудительно прерывать долго выполняющиеся горутины для предотвращения зависаний. 
Анатомия Go: Как работает планировщик горутин на самом деле

Анатомия Go: Как работает планировщик горутин на самом деле

Этот ролик подробно разбирает внутреннее устройство планировщика Go, объясняя его эволюцию от базовых концепций конкурентности до сложных механизмов управления горутинами, тредами и системными вызовами для достижения эффективной и дешевой параллельной работы.

Key Points

Понимание внутренних механизмов планировщика Go критически важно для оптимизации кода, особенно при работе с I/O-bound, CPU-bound задачами, файлами и сетью.
Go-планировщик разработан для обеспечения дешевой и эффективной конкурентной работы, максимально задействуя ядра процессора и упрощая асинхронное выполнение задач.
Планировщик Go реализует модель M:N, где множество горутин выполняются на ограниченном количестве системных тредов, что позволяет создавать тысячи горутин с минимальными накладными расходами.
Go использует концепцию горутин — легковесных "пользовательских" тредов, управляемых планировщиком Go, в отличие от системных тредов, управляемых операционной системой.
Механизм "Work Stealing" позволяет простаивающим процессорам забирать половину работы из локальных очередей других, более загруженных процессоров, обеспечивая балансировку нагрузки.
Для эффективного распределения работы и минимизации блокировок, планировщик использует модель GMP (Goroutine, Machine, Processor) с локальными очередями (LRQ) для каждого процессора и глобальной очередью (GRQ).
Для обработки блокирующих системных вызовов (например, работа с файлами), Go использует механизм "Hand-off", создавая новый системный тред для выполнения других горутин, пока заблокированный тред ожидает.
Сетевые операции и другие неблокирующие системные вызовы обрабатываются через "Network Poller", который позволяет горутинам ожидать ответа, не блокируя системные треды и не создавая новые.
System Monitor (SimoN) играет ключевую роль в планировщике, отслеживая время выполнения горутин, инициируя Hand-off для долгих syscall'ов и перемещая долго ожидающие горутины из Network Poller'а в GRQ.
Планировщик Go является кооперативным, но с версии 1.14 включает элементы вытесняющей многозадачности, позволяя принудительно прерывать долго выполняющиеся горутины для предотвращения зависаний.
Summarize any video — free
Summarizer.tube
Copy All
Share Link
Bookmark

More Resources

Get key points from any YouTube video in seconds

More Summaries