php-Editor Banana antwortet für Sie: Warum verwendet Docall Gopanic im Einzelflug? Wenn im Singleflight mehrere Goroutinen gleichzeitig dieselbe Aufgabe anfordern, müssen wir zur Vermeidung wiederholter Ausführung die Funktion „docall“ verwenden, um sicherzustellen, dass nur eine Goroutine die Aufgabe ausführt. Um Fehler besser behandeln zu können, wenn in einer Goroutine ein Fehler auftritt, verwenden wir die Funktion gopanic, um eine Ausnahme auszulösen. Dies kann den Fehler deutlicher machen und es uns erleichtern, ihn entsprechend zu behandeln und zu debuggen. Daher kann die Verwendung von Gopanic im Singleflight die Zuverlässigkeit und Effizienz der Fehlerbehandlung verbessern. Aus diesem Grund verwendet docall Gopanic im Singleflight.
Ich habe kürzlich den Singleflight-Quellcode gelesen und war verwirrt über Zeile 158.
if len(c.chans) > 0 { go panic(e) select {} // Keep this goroutine around so that it will appear in the crash dump. } else { panic(e) }
Warum Gopanic anstelle von Panic direkt verwenden, wenn Kanäle verwendet werden? Zeile 129 verwendet go docall. Bei dieser Methode tritt Panik auf und die obere Ebene kann sich nicht erholen, also sollte go panic bedeutungslos sein, oder?
Wenn außerdem gleichzeitige Anfragen vorliegen und der Kanal nach der Panik immer noch nicht geschrieben wird, blockieren dann nicht auch andere Goroutinen? Wenn jemand so freundlich wäre, zu lesen und zu antworten, wäre ich sehr dankbar~
Verstehen Sie die Auswirkungen auf das Design
gopanic
将导致无法恢复的恐慌。恐慌和 select
Stellen Sie sicher, dass die in Panik geratene Goroutine anschließend im Stack-Dump auftaucht, damit Sie sich den Stack-Dump ansehen und erkennen können, dass etwas passiert ist, was nicht hätte passieren dürfen.
Dies ist nur eine Möglichkeit, um sicherzustellen, dass Sie sich nicht versehentlich von etwas erholen, das Sie nicht tun sollten.
Das obige ist der detaillierte Inhalt vonWarum verwendet Docall Gopanic im Singleflight?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!