Создает ли Go во время выполнения потоки ОС (M)? - PullRequest
0 голосов
/ 22 марта 2020

numLogicalProcessors на Intel Core i7 - 8 (2 X 4 физических ядра). Linux ОС. Итак, восемь потоков ОС (M) могут работать параллельно. Go во время выполнения может назначить восемь контекстов (P1, P2 .... P8 - runtime.GOMAXPROCS(numLogicalProcessors)) в моей программе Go.

enter image description here

Go соответствует M:N модели потоков, где N ОС потоков и M go подпрограммы Go программы.

Расписания планировщика ОС Потоки ОС . Состояниями потоков являются WAITING, RUNNABLE & EXECUTING.

Go расписания планировщика Go подпрограммы. Go -программные состояния: WAITING, RUNNABLE & EXECUTING. Goroutine - это поток уровня пользователя.


  1. Во время выполнения программы Go явно создаются эти восемь потоков ОС (M)? перед назначением каждого контекста (P) каждому потоку ОС (M)?

  2. Если поток ОС (M1) имеет приоритет (из-за временного интервала) по планировщику ОС, как планировщик рутин (P1) управляет состоянием рутины G1 с помощью LRQ? Получает ли P1 уведомление от ОС, что состояние M1 изменилось?

1 Ответ

2 голосов
/ 23 марта 2020
  1. Да, Go Планировщик запускает выполнение потоков. Количество их можно проверить или изменить с помощью runtime.GOMAXPROCS .
  2. Нет, приоритет операционной системы прозрачен для запущенного процесса. Go время выполнения, начиная с версии 1.14, может выгружать Go подпрограммы , но это позволяет избежать блокировки потоков с помощью замкнутых циклов. Это не связано с вытеснением операционной системы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...