Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengehadkan Rutin Pergi Serentak dengan Saluran dengan Berkesan?

Bagaimana untuk Mengehadkan Rutin Pergi Serentak dengan Saluran dengan Berkesan?

Barbara Streisand
Lepaskan: 2024-11-03 08:45:29
asal
1030 orang telah melayarinya

How to Effectively Limit Concurrent Go Routines with Channels?

Menghadkan Bilangan Rutin Pergi Serentak

Apabila bekerja dengan senarai URL yang perlu diproses secara tidak segerak, selalunya wajar untuk mengehadkan bilangan goroutin serentak kepada mengelakkan sumber yang berlebihan. Penyelesaiannya melibatkan penciptaan saluran terhad yang mengawal bilangan maksimum goroutine yang boleh dilaksanakan secara serentak.

Percubaan Asal

Dalam percubaan asal, saluran penimbal selari saiz telah dicipta:

<code class="go">results := make(chan string, *parallel)</code>
Salin selepas log masuk

Niatnya ialah apabila saluran keputusan penuh, atur cara akan menyekat sehingga nilai dibaca daripada saluran, membolehkan goroutine lain dihasilkan. Walau bagaimanapun, pendekatan ini tidak mengehadkan bilangan goroutine dengan berkesan, kerana program utama tidak menyekat apabila semua URL telah diproses.

Penyelesaian

Penyelesaian yang lebih berkesan melibatkan penciptaan tetapan bilangan goroutin pekerja:

<code class="go">for i := 0; i < *parallel; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        for url := range urls {
            worker(url, client, results)
        }
    }()
}</code>
Salin selepas log masuk

Dalam penyelesaian ini, gorouti bertanggungjawab untuk mengambil URL daripada saluran dan memprosesnya. Saluran ini diberi URL daripada goroutine feeder dan setelah semua URL diambil, goroutine feeder menutup saluran, memberi isyarat kepada pekerja untuk menyelesaikan tugas mereka.

Groutine berasingan memantau status penyiapan pekerja goroutine, menutup saluran keputusan apabila semua pekerja selesai. Pendekatan ini secara berkesan mengehadkan bilangan gorouti yang berjalan kepada kiraan selari yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Rutin Pergi Serentak dengan Saluran 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan