в версиях GO до 1.5, часть кода, включающего runtime.gosched () наблюдал за выходом программы:
func say(s string) { for i := 0; ihello мир привет мир привет мир привет мир hello
hello world hello world hello world hello world hellohello привет привет привет hello
hello hello hello hello helloв версиях Go до 1.5, runtime.gosched () явно дал контроль другим goroutines при вызове. В то время как программы GO запускаются по одному потоку ОС по умолчанию, Runtime.gosched () позволил планированию переключить выполнение между goroutines.
, когда Gomaxprocs не был установлен или установлен на 1, кооперативная многозадачность GO для явного контроля доходности. Таким образом, в приведенном выше примере кода вывод «мира» появился только при вызове Runtime.gosched (), так как он позволил планировщику переключиться на Goroutine, выполняя оператор «World». Это может создать несколько потоков ОС для запуска goroutines. Однако, в отличие от упреждающих многозадачных систем, Goroutines по -прежнему явно выпускает контроль, чтобы позволить другим goroutines выполнять. Это связано с тем, что GO использует кооперативную многозадачность, где goroutines добровольно сдает контроль планировщику.
значение для параллелизма
с Gomaxprocs, установленными на значение, превышающее 1, результат взаимосвязанного гуртинов может стать индивидуальным, как может переключаться между этими временем. Это может привести к непредсказуемым образцам вывода, как видно в примере выше, когда GomaxProcs был установлен на 2.
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3