In Go versions prior to 1.5, a piece of code involving runtime.Gosched() was observed to affect the output of a program:
func say(s string) { for i := 0; ioutput mit runchtime.goch ():
hello world hello world hello world hello world hellooutput ohne runstime.goched ():
hello hello hello hello helloErklärung
in Go -Versionen vor 1.5, runchtime.gosched () ergab, dass es anderen Goroutinen explizit die Kontrolle ergab, wenn sie angerufen werden. Während GO -Programme standardmäßig auf einem einzelnen Betriebssystem ausgeführt wurden, erlaubte Runtime.goched () dem Scheduler, die Ausführung zwischen Goroutines zu wechseln. In dem obigen Codebeispiel wurde also die "Welt" -Autausgabe nur dann erschien, wenn die Laufzeit. Go kann mehrere Betriebssystem -Threads erstellen, um goroutines auszuführen.
mit gomaxprocs, die auf einen Wert von mehr als 1 eingestellt sind, können parallel ausführen. Im Gegensatz zu präventiven Multitasking -Systemen müssen Goroutinen jedoch noch explizit die Kontrolle liefern, damit andere Goroutinen ausführen können. Dies liegt daran, dass Go kooperatives Multitasking verwendet, wobei Goroutines die Kontrolle freiwillig dem Scheduler ergeben. Dies kann zu unvorhersehbaren Ausgangsmustern führen, wie im obigen Beispiel zu sehen ist, wenn GomaxProcs auf 2 gesetzt wurde.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3