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

Bagaimana untuk Mengehadkan Rutin Pergi Serentak dengan Saluran dengan Berkesan?

Barbara Streisand
Barbara Streisandasal
2024-11-03 08:45:29982semak imbas

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>

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>

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!

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