Bagaimanakah anda menamatkan Goroutine dalam Go dengan berkesan?

DDD
Lepaskan: 2024-10-30 13:15:03
asal
682 orang telah melayarinya

How do you effectively terminate a Goroutine in Go?

Membunuh Goroutine dalam Go

Apabila bekerja dengan rutin Go, mengetahui cara menamatkannya dengan berkesan menjadi penting. Pertimbangkan persediaan berikut:

<code class="go">func startsMain() {
    go main()
}

func stopMain() {
    // TODO: Kill main
}

func main() {
    // Infinite loop
}</code>
Salin selepas log masuk

Persediaan ini mencipta gelung tak terhingga dalam goroutine bernama utama. Untuk menamatkan gelung, kita memerlukan cara untuk mengawal goroutine daripada stopMain.

Penyelesaian: Menggunakan Saluran dan pilih

Satu pendekatan berkesan untuk membunuh goroutine ialah melalui saluran dan pernyataan pilih.

<code class="go">var quit chan struct{}

func startLoop() {
    quit := make(chan struct{})
    go loop(quit)
}

func stopLoop() {
    close(quit)
}

func loop(quit chan struct{}) {
    for {
        select {
        case <-quit:
            return
        default:
            // Do stuff
        }
    }
}</code>
Salin selepas log masuk

Dalam contoh ini, kami menggunakan saluran bersaiz sifar (chan struct{}) bernama berhenti untuk menandakan goroutine berhenti. Fungsi gelung berulang kali menyemak saluran keluar menggunakan pernyataan pilih. Apabila berhenti menerima nilai (menunjukkan permintaan berhenti), gelung keluar.

Corak Konkurensi Lain

Go menawarkan corak serentak tambahan untuk mengendalikan goroutin. Lawati Blog Go untuk mendapatkan lebih banyak cerapan tentang corak ini.

Menggunakan Pemasa

Untuk melaksanakan fungsi pada selang masa yang tetap sambil mengelakkan keletihan CPU, anda boleh menggunakan ticker.

<code class="go">import "time"

// [...]

func loop() {
    ticker := time.NewTicker(2 * time.Second)
    defer ticker.Stop()
    for {
        select {
        case <-quit:
            return
        case <-ticker.C:
            // Do stuff
        }
    }
}</code>
Salin selepas log masuk

Dalam kes ini, pilih blok sehingga sama ada berhenti menerima nilai atau ticker fire, membenarkan fungsi tersebut dilaksanakan pada selang waktu tertentu.

Atas ialah kandungan terperinci Bagaimanakah anda menamatkan Goroutine dalam Go dengan berkesan?. 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
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!