Penyahsulitan: Strategi menunggu bagi fungsi utama dalam bahasa Go memerlukan contoh kod khusus
Bahasa Go ialah bahasa pengaturcaraan serentak dan strategi menunggu bagi fungsi utama adalah amat penting. Fungsi utama perlu memastikan ia keluar selepas semua goroutine telah dilaksanakan, jika tidak, ia boleh menyebabkan program ditamatkan lebih awal. Artikel ini akan memperkenalkan beberapa strategi menunggu fungsi utama biasa dan memberikan contoh kod khusus.
Dalam bahasa Go, WaitGroup atau saluran dalam pakej penyegerakan biasanya digunakan untuk melaksanakan menunggu dalam fungsi utama. Di bawah ini kami akan memperkenalkan aplikasi khusus kedua-dua kaedah ini masing-masing.
WaitGroup ialah mekanisme penyegerakan yang boleh digunakan untuk menunggu penghujung kumpulan goroutine. Kaedah Tambah digunakan terutamanya untuk menambah bilangan goroutin menunggu, kaedah Selesai digunakan untuk mengurangkan bilangan, dan kaedah Tunggu menunggu semua goroutin dilaksanakan. Berikut ialah contoh kod:
package main import ( "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() fmt.Printf("Worker %d is working ", id) } func main() { var wg sync.WaitGroup for i := 1; i <= 3; i++ { wg.Add(1) go worker(i, &wg) } wg.Wait() fmt.Println("All workers have finished") }
Dalam kod di atas, kami mentakrifkan fungsi pekerja untuk mensimulasikan goroutine yang perlu dilaksanakan, dan kemudian mulakan 3 goroutine pekerja dalam fungsi utama dan tunggu mereka menyelesaikan pelaksanaan melalui Tunggu kaedah.
Satu lagi fungsi utama strategi menunggu adalah menggunakan saluran. Kita boleh mencipta saluran dan membiarkan setiap goroutine menghantar isyarat kepada saluran ini apabila ia tamat Fungsi utama boleh menerima isyarat ini untuk menentukan sama ada semua goroutine telah dilaksanakan. Berikut ialah kod sampel:
package main import "fmt" func worker(id int, ch chan bool) { fmt.Printf("Worker %d is working ", id) ch <- true } func main() { numWorkers := 3 ch := make(chan bool, numWorkers) for i := 1; i <= numWorkers; i++ { go worker(i, ch) } for i := 1; i <= numWorkers; i++ { <-ch } fmt.Println("All workers have finished") }
Dalam contoh ini, kami mencipta saluran dengan kapasiti numWorkers dan membenarkan setiap goroutine pekerja menghantar nilai ke saluran ini pada penghujungnya. Fungsi utama menerima nilai ini untuk menentukan sama ada semua goroutine telah dilaksanakan.
Ringkasan
Melalui dua contoh kod khusus di atas, kami telah mempelajari tentang dua cara biasa untuk melaksanakan strategi menunggu fungsi utama dalam bahasa Go: menggunakan WaitGroup dalam pakej penyegerakan dan menggunakan saluran. Dalam pembangunan sebenar, adalah sangat penting untuk memilih strategi menunggu yang sesuai mengikut situasi tertentu, bagi memastikan program boleh menunggu dengan betul untuk semua goroutine selesai melaksanakan sebelum keluar semasa pelaksanaan serentak.
Atas ialah kandungan terperinci Penyahsulitan: Strategi menunggu fungsi utama dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!