Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengehadkan Pelaksanaan Goroutine Serentak dalam Go?
Mengehadkan Pelaksanaan Goroutine Serentak
Pertimbangkan senario di mana anda mempunyai senarai URL untuk diproses dan ingin mengehadkan bilangan goroutine serentak berjalan . Contohnya, jika anda mempunyai 30 URL, anda mungkin hanya mahu 10 gorouti berfungsi selari.
Kod yang disediakan cuba menggunakan saluran penimbal bersaiz selari untuk mengehadkan bilangan gorouti yang berjalan . Walau bagaimanapun, pendekatan ini nampaknya tidak menyekat selepas memproses semua URL. Cara yang lebih berkesan untuk mencapai pengehadan konkurensi ini ialah dengan mencipta bilangan goroutin pekerja yang ditentukan dan memberi mereka URL melalui saluran khusus.
Berikut ialah versi kod yang dipertingkatkan:
<code class="go">parallel := flag.Int("parallel", 10, "max parallel requests allowed") flag.Parse() urls := flag.Args() // Create a channel to hold URLs that workers will consume workerURLChan := make(chan string) // Start a goroutine to feed URLs to the workers go func() { for _, u := range flag.Args() { workerURLChan <- u } // Once all URLs have been distributed, close the channel, which will cause workers to exit close(workerURLChan) }() var wg sync.WaitGroup client := rest.Client{} results := make(chan string) // Start the specified number of worker goroutines for i := 0; i < *parallel; i++ { wg.Add(1) go func() { defer wg.Done() // Workers repeatedly fetch URLs from the channel until it is closed for url := range workerURLChan { worker(url, client, results) } }() } // Close the results channel when all workers have completed, which will allow the main goroutine to exit go func() { wg.Wait() close(results) }() // Receive and print results from the worker goroutines for res := range results { fmt.Println(res) }</code>
Dalam kod yang dikemas kini ini, kami mencipta goroutine pekerja untuk setiap pelaksanaan serentak yang dibenarkan, dan pekerja ini mengambil URL daripada saluran khusus. Setelah semua URL telah diedarkan, workerURLChan ditutup, yang mencetuskan pekerja untuk keluar apabila URL semasa mereka selesai. Mekanisme ini mengehadkan bilangan gorout serentak berjalan dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Pelaksanaan Goroutine Serentak dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!