Mengapa Program My Go Terhenti Walaupun Semua Goroutine Telah Selesai? Panduan untuk menyegerakkan.WaitGroup dan Penyekatan Saluran.

Barbara Streisand
Lepaskan: 2024-10-25 11:54:02
asal
793 orang telah melayarinya

Why Does My Go Program Stall Even When All Goroutines Have Finished? A Guide to sync.WaitGroup and Channel Blocking.

Keliru Tentang Keluar Goroutine: Membongkar Misteri penyegerakan.WaitGroup dan Penyekatan Saluran

Dalam Go, mengurus konkurensi dengan penyegerakan.WaitGroup dan saluran adalah amalan biasa. Walau bagaimanapun, bagi pemula, ia boleh membingungkan apabila program terhenti walaupun memenuhi jangkaan penyiapan goroutine. Mari kita mendalami kes tertentu dan membongkar isu asas.

Masalahnya

Seorang pembangun melaksanakan program menggunakan penyegerakan.WaitGroup dan saluran (fetchedSymbols) untuk mendapatkan semula senarai sebut harga saham secara serentak. Sementara program menunggu goroutine selesai, ia enggan ditamatkan.

Memahami Isu

Punca masalah terletak pada peninggalan menutup saluran fetchedSymbols. Apabila melelakan saluran ini dalam fungsi utama, program menjadi disekat selama-lamanya. Dalam kes ini, penutupan saluran hendaklah dimulakan setelah selesai semua goroutine.

Penyelesaian

Untuk memastikan pelaksanaan program lancar, pembangun memperkenalkan goroutine pembantu yang memantau penyegerakan.WaitGroup dan pencetus penutupan fetchedSymbols setelah semua goroutine telah menyelesaikan tugas mereka. Ini menghapuskan gelagat menyekat dan membenarkan program keluar dengan anggun.

Pelaksanaan

<code class="go">go func() {
    wg.Wait()
    close(fetchedSymbols)
}()

for response := range fetchedSymbols {
    fmt.Println("fetched " + response)
}</code>
Salin selepas log masuk

Dengan melaksanakan penyelesaian ini, program kini keluar dengan anggun selepas berjaya memuat turun semua sebut harga saham, dengan cekap menggunakan konkurensi Go ciri.

Atas ialah kandungan terperinci Mengapa Program My Go Terhenti Walaupun Semua Goroutine Telah Selesai? Panduan untuk menyegerakkan.WaitGroup dan Penyekatan Saluran.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!