Middle+
26
0
questionbank

Расскажите о планировании goroutine в Go.

Ответ от нейросети sobes.tech

Планировщик горутин в Go использует модель M:N, где M горутин отображаются на N потоков ОС. Он эффективно переключает горутины между потоками, реализуя невытесняющую многозадачность с точками останова (преemption points).

Основные компоненты GPM модели:

  • G (Goroutine): Абстракция исполняемой единицы кода, легковесный поток, управляемый планировщиком Go.
  • P (Processor): Логический процессор, представляющий собой контекст локальной очереди горутин и ресурсов, таких как мьютексы и планировщик. Количество P по умолчанию определяется количеством логических ядер процессора, но может быть изменено через GOMAXPROCS.
  • M (Machine/Thread): Поток операционной системы, который исполняет код. M связан с P и исполняет горутины из локальной очереди P или глобальной очереди.

Принцип работы:

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

Планировщик горутин в Go использует модель M:N, где M горутин отображаются на N потоков ОС. Он эффективно переключает горутины между потоками, реализуя невытесняющую многозадачность с точками останова (преemption points).

Основные компоненты GPM модели:

  • G (Goroutine): Абстракция исполняемой единицы кода, легковесный поток, управляемый планировщиком Go.
  • P (Processor): Логический процессор, представляющий собой контекст локальной очереди горутин и ресурсов, таких как мьютексы и планировщик. Количество P по умолчанию определяется количеством логических ядер процессора, но может быть изменено через GOMAXPROCS.
  • M (Machine/Thread): Поток операционной системы, который исполняет код. M связан с P и исполняет горутины из локальной очереди P или глобальной очереди.

Принцип работы:

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

Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.

golanggoroutine-schedulingconcurrencymultithreadingruntime