Heim >Backend-Entwicklung >Golang >Warum vermeidet der bereitgestellte Code den „Deadlock'-Fehler trotz Import des net/http-Pakets?
Warum generiert dieser Code keinen „Deadlock“-Fehler?
Der bereitgestellte Code enthält eine Importanweisung für das Net/http-Paket, aber ruft seine Funktionen nicht auf. Trotzdem wird die „Deadlock“-Fehlermeldung nicht erzeugt.
Erklärung
Der Import des Netzpakets initialisiert Hintergrundabfrage-Goroutinen, die den Deadlock-Detektor effektiv deaktivieren. Der Deadlock-Detektor basiert auf der Fähigkeit der Laufzeit, zu erkennen, wenn Kanäle keine Daten empfangen. Allerdings erzeugen die im Hintergrund abfragenden Goroutinen intermittierende Kanalaktivitäten, die den Deadlock-Detektor austricksen und ihn daran hindern, Deadlocks zu melden.
Beispiel
Bedenken Sie den folgenden Code:
package main import ( "fmt" "net/http" ) func main() { var ch = make(chan int) ch <- 1 }
Wenn der Netz-/http-Import entfernt wird, generiert der Code den erwarteten „Deadlock“-Fehler, da der Kanal niemals Daten von einer anderen Goroutine empfängt. Wenn jedoch der Netz-/http-Import vorhanden ist, stellen die im Hintergrund abfragenden Goroutinen die notwendige Kanalaktivität bereit, um zu verhindern, dass der Deadlock-Fehler gemeldet wird.
Weiterführende Literatur
Dieses Verhalten wird in der folgenden GitHub-Ausgabe ausführlicher besprochen: https://github.com/golang/go/issues/12734
Das obige ist der detaillierte Inhalt vonWarum vermeidet der bereitgestellte Code den „Deadlock'-Fehler trotz Import des net/http-Pakets?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!