Heim > Backend-Entwicklung > Golang > Wie kann man eine Goroutine in Go ordnungsgemäß beenden?

Wie kann man eine Goroutine in Go ordnungsgemäß beenden?

Mary-Kate Olsen
Freigeben: 2024-10-29 17:22:02
Original
682 Leute haben es durchsucht

How to Gracefully Terminate a Goroutine in Go?

Eine Goroutine elegant töten

In Go sorgen Goroutinen für Parallelität, sodass mehrere Aufgaben gleichzeitig ausgeführt werden können. Manchmal ist es notwendig, eine Goroutine zu beenden, beispielsweise wenn wir eine Anwendung ordnungsgemäß herunterfahren müssen.

Bedenken Sie den folgenden Code:

<code class="go">func startsMain() {
    go main()
}

func stopMain() {
    //kill main
}

func main() {
    //infinite loop
}</code>
Nach dem Login kopieren

In diesem Szenario wird die Haupt-Goroutine ausgeführt eine Endlosschleife, und wir möchten sie in der Funktion stopMain stoppen. Wie können wir das erreichen?

Die Lösung liegt in der Nutzung von Kanälen für die Kommunikation zwischen Goroutinen. Hier ist ein verbesserter Codeausschnitt:

<code class="go">var quit chan struct{}

func startLoop() {
    quit = make(chan struct{})
    go loop()
}

func stopLoop() {
    close(quit)
}

// BTW, you cannot call your function main, it is reserved
func loop() {
    for {
        select {
        case <-quit:
            return // better than break
        default:
            // do stuff. I'd call a function, for clarity:
            do_stuff()
        }
    }
}</code>
Nach dem Login kopieren

Wir führen einen Quit-Kanal vom Typ struct{} ein, der einen leeren Strukturwert enthalten kann.

  • In startLoop initialisieren wir den Quit Kanal und starten Sie die Schleifen-Goroutine.
  • In stopLoop schließen wir den Beendigungskanal und signalisieren der Schleifen-Goroutine, dass sie anhalten soll.
  • In der Schleifen-Goroutine verwenden wir select mit einem Standardfall für kontinuierlich Überprüfen Sie, ob Signale vom Quittungskanal kommen. Wenn ein Signal empfangen wird, wird die Schleife ordnungsgemäß beendet.

Dieser Mechanismus ermöglicht es uns, die Endlosschleife ordnungsgemäß zu beenden, indem wir der Goroutine über den Beendigungskanal ein Signal senden.

Das obige ist der detaillierte Inhalt vonWie kann man eine Goroutine in Go ordnungsgemäß beenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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