Sobes.tech
Back to questions
Middle+
4

Расскажите про планировщик Go, как он работает, какой алгоритм.

Companies where asked
Servicepipi

Answer from AI

sobes.tech AI

Планировщик Go — это система управления выполнением горутин (легковесных потоков) в рантайме Go. Он реализует модель M:N, где M — количество системных потоков (OS threads), а N — количество горутин.

Основные компоненты:

  • G (goroutine) — отдельная легковесная задача.
  • M (machine) — системный поток, который выполняет горутины.
  • P (processor) — логический процессор, который связывает M и G. Количество P ограничивает параллелизм.

Алгоритм работы:

  1. У каждого M должен быть связанный P для выполнения G.
  2. Планировщик распределяет горутины по P, которые затем выполняются на M.
  3. Если горутина блокируется (например, на системном вызове), M освобождается и может выполнять другую горутину.
  4. Планировщик использует очередь готовых горутин для каждого P.
  5. Для балансировки нагрузки есть глобальная очередь и локальные очереди для каждого P.

Такой подход позволяет эффективно использовать системные потоки и масштабировать выполнение большого числа горутин с минимальными накладными расходами по сравнению с системными потоками.

Пример: если у вас 4 P (например, 4 ядра CPU), то одновременно могут выполняться 4 горутины параллельно, а остальные будут в очереди, ожидая своей очереди.