Heim > Backend-Entwicklung > Golang > Wie kann ich die Haupt-Goroutine in Go auf unbestimmte Zeit laufen lassen?

Wie kann ich die Haupt-Goroutine in Go auf unbestimmte Zeit laufen lassen?

Patricia Arquette
Freigeben: 2024-12-17 21:25:10
Original
181 Leute haben es durchsucht

How Can I Keep the Main Goroutine Running Indefinitely in Go?

Verlängern der Existenz der Haupt-Goroutine in Go

Eternal Slumber

Go bietet eine Reihe von Mechanismen, um die Haupt-Goroutine auf unbestimmte Zeit laufen zu lassen, ohne Rechenleistung zu verbrauchen . Betrachten Sie diese Strategien:

  • Auswählen ohne Fälle: Eine dauerhafte Blockierung ohne CPU-Verbrauch ist durch eine SELECT-Anweisung ohne Fälle oder Standardklausel erreichbar:

    select {}
    Nach dem Login kopieren
  • Empfangen von einem leeren Kanal: Die Haupt-Goroutine kann ausgesetzt werden auf unbestimmte Zeit durch kontinuierliches Empfangen von einem leeren Kanal:

    <-make(chan int)
    Nach dem Login kopieren
  • Empfangen von einem Null-Kanal: Ebenso führt das Empfangen von einem Null-Kanal zum gleichen Effekt:

    <-chan int(nil)
    Nach dem Login kopieren
  • Senden an einen Nil-Kanal: Durch das Senden an einen Null-Kanal wird auch die Haupt-Goroutine dauerhaft angehalten:

    (chan int)(nil) <- 0
    Nach dem Login kopieren
  • Sperren eines vorgesperrten Mutex: Durch das Sperren eines bereits gesperrten Mutex wird die Haupt-Goroutine effektiv angehalten :

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()
    Nach dem Login kopieren

Kontrolliert Ausstieg

Um einen reibungslosen Ausstieg zu ermöglichen, kann ein dedizierter Beendigungskanal genutzt werden. Wenn die Notwendigkeit besteht, das Programm zu beenden, wird dieser Kanal geschlossen:

var quit = make(chan struct{})

func main() {
    defer close(quit)
    // Application code...
    <-quit
}
Nach dem Login kopieren

In einer separaten Goroutine löst das Schließen des Beendigungskanals das Beenden der Haupt-Goroutine aus:

close(quit)
Nach dem Login kopieren

Ruhe ohne Blockierung

Wenn das Ziel darin besteht, zu verhindern, dass die Haupt-Goroutine beendet wird, ohne sie zu blockieren, kann die Funktion time.Sleep() mit einem ausreichenden Aufwand verwendet werden große Dauer, begrenzt auf etwa 292 Jahre:

time.Sleep(time.Duration(1<<63 - 1))
Nach dem Login kopieren

Für längere Dauern sollten Sie eine Endlosschleife in Betracht ziehen, die die oben genannte Zeit einschließt.Sleep():

for {
    time.Sleep(time.Duration(1<<63 - 1))
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die Haupt-Goroutine in Go auf unbestimmte Zeit laufen lassen?. 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