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
Mary-Kate OlsenOriginal
2024-12-13 18:29:10148Durchsuche

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 {}
  • Empfang von einem nicht initialisierten Kanal:

    <-make(chan int)
  • Empfang von einem Nullkanal:

    <-(chan int)(nil)
  • Senden an eine Null Kanal:

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

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()

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)

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))

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

for {
    time.Sleep(time.Duration(1<<63 - 1))
}

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!

Stellungnahme:
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