Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memastikan Goroutine Utama Berjalan Tanpa Had dalam Go?

Bagaimanakah Saya Boleh Memastikan Goroutine Utama Berjalan Tanpa Had dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-17 21:25:10194semak imbas

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

Memanjangkan Kewujudan Goroutine Utama dalam Go

Eternal Slumber

Go menawarkan pelbagai mekanisme untuk memastikan goroutine utama berjalan selama-lamanya tanpa menggunakan kuasa pemprosesan . Pertimbangkan strategi ini:

  • Pilih tanpa Kes: Menyekat selama-lamanya tanpa penggunaan CPU boleh dicapai melalui penyataan terpilih tanpa kes atau klausa lalai:

    select {}
  • Menerima daripada Saluran Kosong: goroutine utama boleh digantung selama-lamanya dengan terus menerima daripada saluran kosong:

    <-make(chan int)
  • Menerima daripada Saluran Tiada: Begitu juga, menerima daripada saluran tiada menghasilkan sama kesan:

    <-chan int(nil)
  • Menghantar ke Saluran Nil: Menghantar ke saluran nil juga menggantung goroutine utama secara kekal:

    (chan int)(nil) <- 0
  • Mengunci Mutex Pra-Kunci: Mengunci yang sudah mutex berkunci dengan berkesan menghalang goroutine utama:

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

Keluar Terkawal

Untuk memudahkan keluar yang anggun, saluran berhenti khusus boleh digunakan. Apabila timbul keperluan untuk menamatkan program, saluran ini ditutup:

var quit = make(chan struct{})

func main() {
    defer close(quit)
    // Application code...
    <-quit
}

Dalam goroutine yang berasingan, menutup saluran berhenti mencetuskan jalan keluar goroutine utama:

close(quit)

Tidur Tanpa Menghalang

Jika matlamatnya adalah untuk memastikan goroutine utama daripada ditamatkan tanpa menyekatnya, time.Fungsi Sleep() boleh digunakan dengan tempoh yang cukup besar, dihadkan pada kira-kira 292 tahun:

time.Sleep(time.Duration(1<<63 - 1))

Untuk tempoh lanjutan, pertimbangkan gelung tidak berkesudahan yang menggabungkan masa di atas.Sleep():

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Goroutine Utama Berjalan Tanpa Had dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn