Bagaimana untuk Menamatkan Goroutine Berjalan dengan Anggun dalam Go?

Barbara Streisand
Lepaskan: 2024-10-28 01:03:02
asal
949 orang telah melayarinya

How to Gracefully Terminate a Running Goroutine in Go?

Menandatangani Goroutine untuk Ditamatkan

Dalam Go, pengendalian penamatan goroutine boleh menjadi penting apabila memastikan penutupan aplikasi yang anggun atau mengurus peruntukan sumber. Artikel ini meneroka teknik untuk memberi isyarat kepada goroutine yang sedang berjalan supaya menghentikan pelaksanaannya.

Contoh yang disediakan dalam pertanyaan menunjukkan goroutine yang gelung tak terhingga, meniru pemprosesan berterusan. Matlamatnya adalah untuk menamatkan goroutine ini jika ia melebihi tamat masa yang ditentukan.

Pendekatan awal melibatkan penggunaan dua saluran: satu untuk komunikasi dan satu lagi untuk penamatan isyarat. Walau bagaimanapun, membaca daripada saluran isyarat akan menyekat goroutine, mengalahkan tujuan yang dimaksudkan.

Menggunakan Saluran Hentian Tambahan

Satu penyelesaian yang berkesan ialah memperkenalkan saluran hentian tambahan , tooLate, jenis chan struct{}. Di dalam goroutine, pernyataan pilih digunakan untuk memantau kedua-dua saluran komunikasi dan saluran berhenti. Jika saluran tooLate menerima nilai, goroutine akan kembali dengan anggun, menamatkan gelung pemprosesannya.

Berikut ialah coretan kod yang diubah suai:

<code class="go">func main() {
    // tooLate channel to signal goroutine to stop
    tooLate := make(chan struct{})
    proCh := make(chan string)

    go func() {
        for {
            fmt.Println("working")
            time.Sleep(1 * time.Second)

            select {
            case <-tooLate:
                fmt.Println("stopped")
                return
            case proCh <- "processed": // Avoid blocking
            default: // Handle potential blocking
            }
            fmt.Println("done here")
        }
    }()

    // ...

    // Signal termination
    fmt.Println("too late")
    close(tooLate)

    // ...
}</code>
Salin selepas log masuk

Dalam penyelesaian ini, saluran proCh terus digunakan untuk komunikasi, manakala saluran tooLate berfungsi sebagai isyarat untuk penamatan. Apabila saluran tooLate ditutup, goroutine mengesan ini dan keluar dari gelungnya.

Pertimbangan Lain

Selain menggunakan saluran tambahan, terdapat pendekatan alternatif untuk memberi isyarat goroutin, seperti menggunakan penyegerakan terbina dalam. Jenis Cond untuk kawalan yang lebih halus ke atas penyegerakan goroutine. Pilihan teknik bergantung pada keperluan khusus permohonan anda.

Atas ialah kandungan terperinci Bagaimana untuk Menamatkan Goroutine Berjalan dengan Anggun 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!