Kelebihan penyegerakan.WaitGroup berbanding Saluran
Dalam pengaturcaraan serentak, penyegerakan antara goroutine adalah penting. Walaupun kedua-dua sync.WaitGroup dan saluran menyediakan cara untuk penyegerakan, ia berbeza dalam pendekatan dan penggunaannya.
sync.WaitGroup
sync.WaitGroup, seperti namanya, menyediakan cara untuk menunggu sekumpulan gorout menyelesaikan tugas mereka. Ia beroperasi dengan mengekalkan kiraan goroutin aktif, dan setiap goroutine menandakan siapnya dengan memanggil kaedah Done(). Kaedah Wait() menyekat goroutine panggilan sehingga semua goroutine dalam kumpulan telah memanggil Done().
Contoh:
import ( "fmt" "sync" "time" ) var wg sync.WaitGroup func main() { words := []string{"foo", "bar", "baz"} for _, word := range words { wg.Add(1) go func(word string) { time.Sleep(1 * time.Second) defer wg.Done() fmt.Println(word) }(word) } // Waits for goroutines to finish wg.Wait() }
Kelebihan:
Saluran
Saluran, sebaliknya, menyediakan cara untuk berkomunikasi dan bertukar data antara goroutine. Mereka beroperasi dengan menghantar dan menerima nilai melalui saluran, dan berbilang goroutin boleh membaca atau menulis secara serentak ke saluran yang sama saluran.
Contoh:
import ( "fmt" "time" ) func main() { words := []string{"foo", "bar", "baz"} done := make(chan bool) for _, word := range words { go func(word string) { time.Sleep(1 * time.Second) fmt.Println(word) done <- true }(word) } // Wait for goroutines to finish for range words { <-done } }
Kelebihan:
Kesimpulan:
penyegerakan.WaitGroup selalunya diutamakan untuk tugas penyegerakan mudah yang menyekat dikehendaki. Ia menyediakan pendekatan yang mudah dan berskala untuk memastikan semua gorout menyelesaikan tugas mereka sebelum meneruskan. Sebaliknya, saluran menawarkan lebih fleksibiliti dan kawalan ke atas komunikasi dan penyegerakan, menjadikannya sesuai untuk senario yang lebih kompleks.
Atas ialah kandungan terperinci Bilakah anda harus menggunakan sync.WaitGroup melalui saluran untuk penyegerakan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!