Warum vermeidet der bereitgestellte Code den „Deadlock'-Fehler trotz Import des net/http-Pakets?

Patricia Arquette
Freigeben: 2024-10-24 10:33:02
Original
447 Leute haben es durchsucht

Why Does the Provided Code Avoid the

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
}
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!