Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Bilangan Tetap Goroutine Serentak dalam Go?
Mengekalkan Bilangan Tetap Goroutine Serentak
Dalam Go, anda mungkin menghadapi senario yang mengawal bilangan goroutin yang berjalan serentak adalah penting. Walaupun tutorial sering menumpukan pada menunggu gorouti disiapkan, mencapai bilangan tertentu gorouti aktif pada bila-bila masa memberikan cabaran yang berbeza.
Pertimbangkan situasi berikut: anda mempunyai ratusan ribu tugasan untuk diproses. Memproses setiap tugas memerlukan goroutine sendiri, tetapi sumber sistem anda hanya boleh mengendalikan maksimum 20 goroutine serentak. Anda perlu memastikan bahawa sentiasa ada 20 gorouti yang sedang berjalan, melancarkan yang baharu apabila yang sedia ada selesai.
Sejajar Terbatas
Untuk mencapai matlamat ini, Corak Go Concurrency artikel mencadangkan menggunakan corak yang dipanggil "Paralelisme Terbatas." Ia melibatkan penggunaan saluran struct kosong sebagai pengawal untuk mengehadkan bilangan pekerja serentak.
Pelaksanaan
Berikut ialah contoh yang menunjukkan cara melaksanakan corak ini:
package main import ( "fmt" "sync" ) func main() { const maxGoroutines = 20 // Create a channel of empty structs to control worker count guard := make(chan struct{}, maxGoroutines) var wg sync.WaitGroup // Launch workers for i := 0; i < 30; i++ { wg.Add(1) guard <- struct{}{} // Blocks if guard channel is filled go func(n int) { defer wg.Done() worker(n) <-guard // Release slot in guard channel }(i) } wg.Wait() } func worker(i int) { fmt.Println("doing work on", i) }
Dalam contoh ini, saluran pengawal digunakan sebagai baldi token. Bilangan maksimum goroutin yang boleh dijalankan serentak dihadkan oleh kapasiti saluran (20 dalam kes ini). Setiap goroutine memperoleh "token" (struktur kosong) daripada saluran sebelum memulakan kerja. Apabila goroutine selesai, ia mengeluarkan tokennya kembali ke saluran, menjadikannya tersedia untuk goroutine lain untuk diperoleh. Dengan mengawal bilangan token dalam saluran, anda mengawal bilangan goroutin serentak dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Bilangan Tetap Goroutine Serentak dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!