Signalisieren von Goroutinen zum Beenden
In Go kann die Handhabung der Goroutinen-Beendigung von entscheidender Bedeutung sein, wenn es darum geht, eine ordnungsgemäße Anwendung herunterzufahren oder die Ressourcenzuteilung zu verwalten. In diesem Artikel wird eine Technik untersucht, mit der einer laufenden Goroutine signalisiert wird, ihre Ausführung zu stoppen.
Das in der Untersuchung bereitgestellte Beispiel zeigt eine Goroutine, die Endlosschleifen durchführt und so eine kontinuierliche Verarbeitung simuliert. Das Ziel besteht darin, diese Goroutine zu beenden, wenn sie ein bestimmtes Timeout überschreitet.
Ein erster Ansatz besteht darin, zwei Kanäle zu verwenden: einen für die Kommunikation und einen für die Signalisierung der Beendigung. Das Lesen aus dem Signalisierungskanal würde jedoch die Goroutine blockieren und ihren beabsichtigten Zweck zunichte machen.
Verwendung eines zusätzlichen Stoppkanals
Eine effektive Lösung besteht darin, einen zusätzlichen Stoppkanal einzuführen , tooLate, vom Typ chan struct{}. Innerhalb der Goroutine wird eine Select-Anweisung verwendet, um sowohl den Kommunikationskanal als auch den Stoppkanal zu überwachen. Wenn der TooLate-Kanal einen Wert empfängt, kehrt die Goroutine ordnungsgemäß zurück und beendet ihre Verarbeitungsschleife.
Hier ist das geänderte Code-Snippet:
func main() {
// tooLate channel to signal goroutine to stop
tooLate := make(chan struct{})
proCh := make(chan string)
go func() {
for {
fmt.Println("working")
time.Sleep(1 * time.Second)
select {
case In dieser Lösung wird der proCh-Kanal weiterhin für die Kommunikation verwendet, während der tooLate-Kanal als Signal für die Beendigung dient. Wenn der tooLate-Kanal geschlossen wird, erkennt die Goroutine dies und verlässt ihre Schleife.
Weitere Überlegungen
Neben der Verwendung eines zusätzlichen Kanals gibt es alternative Ansätze zur Signalisierung von Goroutinen, Verwenden Sie beispielsweise den integrierten Typ sync.Cond für eine detailliertere Steuerung der Goroutine-Synchronisierung. Die Wahl der Technik hängt von den spezifischen Anforderungen Ihrer Anwendung ab.
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