Gunakan Go WaitGroup untuk mencapai tugas pemprosesan serentak yang cekap
Dalam bahasa Go, gunakan WaitGroup untuk mencapai tugas pemprosesan serentak yang cekap. WaitGroup ialah semafor mengira yang digunakan untuk menunggu sekumpulan gorout menyelesaikan kerja mereka sebelum meneruskan ke langkah seterusnya.
WaitGroup mempunyai tiga kaedah utama: Add(), Done() dan Wait(). Kaedah Add() digunakan untuk menambah bilangan goroutine menunggu, kaedah Done() menunjukkan bahawa goroutine telah selesai, dan kaedah Wait() digunakan untuk menyekat goroutine utama sehingga semua goroutine telah selesai.
Yang berikut akan menggunakan contoh mudah untuk menggambarkan cara menggunakan WaitGroup untuk memproses tugasan secara serentak.
Pertama, kita perlu mencipta instance WaitGroup:
var wg sync.WaitGroup
Kemudian, kita boleh menggunakan kaedah Add() untuk menambah bilangan goroutine menunggu dan memanggil kaedah Done() pada penghujung setiap goroutine:
func main() { // 设置等待的goroutine数量 wg.Add(2) // 启动第一个goroutine go doTask1() // 启动第二个goroutine go doTask2() // 等待所有goroutine完成 wg.Wait() } func doTask1() { // 模拟任务1 time.Sleep(time.Second * 1) fmt.Println("Task 1 is done!") // 调用Done()方法表示任务完成 wg.Done() } func doTask2() { // 模拟任务2 time.Sleep(time.Second * 2) fmt.Println("Task 2 is done!") // 调用Done()方法表示任务完成 wg.Done() }
In contoh di atas, kami mencipta dua goroutine untuk melaksanakan fungsi doTask1() dan doTask2(), setiap fungsi mensimulasikan tugas yang memakan masa. Selepas memulakan semua goroutine, goroutine utama memanggil kaedah Tunggu() untuk menyekat dirinya sehingga semua tugasan selesai.
Jalankan kod di atas, anda boleh mendapatkan output yang serupa dengan yang berikut:
Task 1 is done! Task 2 is done!
Anda boleh melihat bahawa kedua-dua tugasan dilaksanakan secara selari, dan maklumat yang sepadan dicetak selepas selesai. Gunakan WaitGroup untuk memudahkan pemprosesan serentak dan menyambung semula pelaksanaan goroutine utama selepas semua tugasan selesai.
Perlu diambil perhatian bahawa apabila menggunakan WaitGroup, anda mesti memastikan bahawa setiap tugas memanggil kaedah Done(), jika tidak goroutine utama akan sentiasa disekat pada kaedah Wait(), menyebabkan program tidak dapat meneruskan pelaksanaan.
Ringkasnya, Go WaitGroup ialah alat kawalan serentak yang mudah dan berkesan yang boleh membantu kami mencapai tugas pemprosesan serentak yang cekap. Dengan memanggil kaedah Add(), Done(), dan Wait(), kami boleh mengawal susunan pelaksanaan goroutine dan terus melakukan operasi seterusnya selepas semua tugasan selesai.
Saya harap artikel ini akan membantu anda memahami tugas pemprosesan serentak dan menggunakan Go WaitGroup!
Atas ialah kandungan terperinci Gunakan Go WaitGroup untuk melaksanakan tugas pemprosesan serentak yang cekap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!