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
Lepaskan: 2024-12-17 21:25:10
asal
182 orang telah melayarinya

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 {}
    Salin selepas log masuk
  • Menerima daripada Saluran Kosong: goroutine utama boleh digantung selama-lamanya dengan terus menerima daripada saluran kosong:

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

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

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

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()
    Salin selepas log masuk

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
}
Salin selepas log masuk

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

close(quit)
Salin selepas log masuk

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))
Salin selepas log masuk

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

for {
    time.Sleep(time.Duration(1<<63 - 1))
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan