Heim > Backend-Entwicklung > Golang > Wie verhindere ich, dass die Haupt-Goroutine in einem Go-Programm vorzeitig beendet wird?

Wie verhindere ich, dass die Haupt-Goroutine in einem Go-Programm vorzeitig beendet wird?

Mary-Kate Olsen
Freigeben: 2024-12-13 18:29:10
Original
230 Leute haben es durchsucht

How Do I Prevent the Main Goroutine in a Go Program from Terminating Prematurely?

Persistenz der Haupt-Goroutine in Go-Programmen

Man könnte auf die Frage stoßen, wie man verhindern kann, dass die Haupt-Goroutine eines Go-Programms vorzeitig beendet wird. Mit anderen Worten besteht das Ziel darin, das Programm auf unbestimmte Zeit laufen zu lassen, außer durch explizite Benutzereingriffe.

„Schlafen“ der Haupt-Goroutine

Es gibt mehrere Ansätze Die Haupt-Goroutine wartet ewig, ohne CPU-Ressourcen zu verbrauchen:

  • Eine leere Auswahl Aussage:

    select {}
    Nach dem Login kopieren
  • Empfang von einem nicht initialisierten Kanal:

    <-make(chan int)
    Nach dem Login kopieren
  • Empfang von einem Nullkanal:

    <-(chan int)(nil)
    Nach dem Login kopieren
  • Senden an eine Null Kanal:

    (chan int)(nil) <- 0
    Nach dem Login kopieren
  • Sperren einer gesperrten Synchronisierung.Mutex:

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

Beenden des Programms

Wenn ein Mechanismus zum Beenden des Programms gewünscht wird, kann ein einfacher Kanal dienen Zweck:

var quit = make(chan struct{})

func main() {
    // Startup code...

    // Blocking (waiting for quit signal):
    <-quit
}

// Quitting in another goroutine:
close(quit)
Nach dem Login kopieren

Schlafen ohne Blockierung

Ein alternativer Ansatz, um das Programm am Laufen zu halten, ohne die Haupt-Goroutine zu blockieren, ist die Verwendung einer langen Schlafdauer:

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

Für extrem lange laufende Programme kann eine Schleife solcher Schlafanweisungen verwendet werden:

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

Das obige ist der detaillierte Inhalt vonWie verhindere ich, dass die Haupt-Goroutine in einem Go-Programm vorzeitig beendet wird?. 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