Как go Goroutines разделяют ресурсы процессора? - PullRequest
0 голосов
/ 06 января 2019

Скажем, я запускаю больше программ, чем у меня есть ядер в моем процессоре. Как они делят ресурсы процессора? Они бегают в течение определенного количества времени, затем спят немного? Работают ли они до тех пор, пока они связаны с процессором, а затем выходят, что позволяет запускать нехватку ресурсов процессора?

1 Ответ

0 голосов
/ 06 января 2019

Планировщик Go управляет распределением ресурсов ЦП между программами.

Я полагаю, что в настоящее время это кооперативный планировщик, что означает, что ваш код должен дать планировщику возможность переключаться между контекстами на другие программы, либо совершая системные вызовы / вызовы функций, либо используя примитивы синхронизации, такие как atomic, mutex или channel. операции.

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

Похоже, что некоторые упреждающие методы планирования могут быть запланированы для Go1.12, см. Здесь:

https://github.com/golang/go/issues/24543

Дополнительная информация о планировщике Go:

https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...