


Penyahsulitan: Strategi menunggu fungsi utama dalam bahasa Go
Mar 10, 2024 pm 02:06 PMPenyahsulitan: 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.
- Gunakan WaitGroup dalam pakej penyegerakan
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.
- Gunakan saluran
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!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang

Aplikasi konkurensi dan coroutine dalam reka bentuk API Golang

Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang?

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go

Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing?

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang?

Panduan untuk menguji unit fungsi serentak Go

Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin
