Kooperative Planung von Goroutinen und potenzieller Ausführungsmangel
Goroutinen werden kooperativ geplant, was bedeutet, dass sie die Ausführung freiwillig anderen Goroutinen überlassen. Während dieser Ansatz im Allgemeinen für Fairness sorgt, wirft er die Frage auf, ob Goroutinen, die nicht nachgeben, möglicherweise andere Goroutinen aushungern lassen können.
Laut dem Blog-Beitrag, auf den verwiesen wird (http://blog.nindalf.com/how-goroutines -work/) können Goroutinen, die eine kontinuierliche Schleife ausführen, ohne nachzugeben, tatsächlich andere Goroutinen im selben Thread aushungern lassen. Goroutinen in einem bestimmten Thread werden gemultiplext, was bedeutet, dass sie den Thread nicht blockieren, selbst wenn sie auf blockierende Vorgänge wie Netzwerkeingabe, Ruhezustand oder Kanaloperationen stoßen.
Als Beispiel: Die „Summe“-Funktion im angegebenen Code wiederholt Durchläuft eine zufällige Anzahl von Malen, addiert Zahlen zu einer Summe und gibt das Endergebnis aus. Wenn mehrere solcher Goroutinen mit dem Schlüsselwort „go“ erzeugt werden (wie im Beispiel gezeigt), hängt es von den folgenden Faktoren ab, ob sie nacheinander ausgeführt werden:
Daher können Goroutinen, die Endlosschleifen ausführen, möglicherweise andere Goroutinen im selben Thread aushungern, wenn kein explizites Yieling oder Funktionsaufrufe vorhanden sind, die die Planung auslösen. Es ist jedoch wichtig zu beachten, dass die Go-Laufzeit aktiv versucht, die Goroutine-Ausführung auszubalancieren und ein Aushungern zu verhindern.
Das obige ist der detaillierte Inhalt vonKann das kontinuierliche Ausführen von Goroutinen andere Goroutinen in Go verhungern lassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!