Rumah >pembangunan bahagian belakang >Golang >Penggunaan Pantas: Panduan Aplikasi Go WaitGroup dalam Projek Golang
Penggunaan Pantas: Panduan Aplikasi Go WaitGroup dalam Projek Golang
Pengenalan:
Dalam pengaturcaraan serentak, menunggu semua goroutine menyelesaikan tugas adalah tugas biasa. Go WaitGroup ialah alat yang berkuasa di Golang untuk tujuan ini. Artikel ini akan memperkenalkan konsep asas Go WaitGroup dan menyediakan beberapa contoh kod khusus untuk membantu pembaca menggunakan dan menggunakan WaitGroup dengan cepat dalam projek Golang.
1. Apakah itu WaitGroup?
WaitGroup ialah primitif serentak di Golang, yang digunakan untuk menunggu sekumpulan goroutin menyelesaikan tugas. Ia menyediakan tiga kaedah terutamanya:
Dengan menggunakan ketiga-tiga kaedah ini bersama-sama, kita boleh dengan mudah menunggu semua tugasan goroutine selesai dan kemudian melakukan operasi seterusnya.
2. Contoh kod:
Untuk lebih memahami senario penggunaan dan aplikasi WaitGroup, dua contoh kod khusus akan diberikan di bawah.
Contoh 1:
Dalam contoh ini, kami menggunakan WaitGroup untuk menunggu sekumpulan goroutin menyelesaikan pelaksanaan.
package main import ( "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() fmt.Printf("Worker %d starting ", id) // 模拟一些耗时的操作 for i := 0; i < 5; i++ { fmt.Printf("Worker %d working... ", id) } fmt.Printf("Worker %d finished ", id) } func main() { var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) go worker(i, &wg) } wg.Wait() fmt.Println("All workers finished") }
Dalam kod di atas, kami mentakrifkan fungsi pekerja untuk mensimulasikan beberapa operasi yang memakan masa. Dalam fungsi utama, kami menggunakan gelung untuk mencipta 5 goroutine, dan menambah goroutine menunggu ke WaitGroup dengan memanggil wg.Add(1). Kemudian, selepas setiap goroutine menyelesaikan tugasnya, ia menandakan tugas sebagai selesai dengan memanggil wg.Done(). Akhir sekali, panggil wg.Wait() dalam fungsi utama untuk menunggu semua goroutine selesai, dan kemudian keluarkan "Semua pekerja selesai".
Contoh 2:
Dalam contoh ini, kami menggunakan WaitGroup dan saluran untuk melaksanakan goroutin utama untuk menunggu semua goroutin kanak-kanak menyelesaikan tugasan dan mengagregatkan hasilnya.
package main import ( "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup, result chan<- int) { defer wg.Done() fmt.Printf("Worker %d starting ", id) // 模拟一些耗时的操作 sum := 0 for i := 0; i < 5; i++ { sum += i } fmt.Printf("Worker %d finished, result: %d ", id, sum) result <- sum } func main() { var wg sync.WaitGroup result := make(chan int, 5) for i := 1; i <= 5; i++ { wg.Add(1) go worker(i, &wg, result) } wg.Wait() close(result) total := 0 for r := range result { total += r } fmt.Printf("All workers finished, total result: %d ", total) }
Dalam kod di atas, kami menghantar setiap hasil pengiraan goroutine kembali ke goroutine utama melalui saluran dalam fungsi pekerja, dan akhirnya meringkaskan semua keputusan dalam goroutine utama. Dengan menggunakan gabungan WaitGroup dan saluran, kami boleh melaksanakan tugasan goroutine dan ringkasan keputusan dengan lebih fleksibel.
3. Ringkasan:
Go WaitGroup ialah alat penting untuk melaksanakan tugasan serentak menunggu di Golang. Artikel ini memberikan dua contoh kod khusus untuk membantu pembaca memahami dengan cepat dan menggunakan aplikasi WaitGroup dalam projek Golang. Saya harap pembaca boleh menggunakan sepenuhnya alat berkuasa ini untuk meningkatkan prestasi serentak dan kebolehpercayaan projek.
Atas ialah kandungan terperinci Penggunaan Pantas: Panduan Aplikasi Go WaitGroup dalam Projek Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!