Mengapa Aplikasi Go Hang Apabila Menggunakan WaitGroups dan Saluran?

DDD
Lepaskan: 2024-10-26 08:19:02
asal
714 orang telah melayarinya

Why Do Go Applications Hang When Using WaitGroups and Channels?

Menutup Saluran untuk Aplikasi Keluar Bersih dalam Go Menggunakan WaitGroups

Artikel ini menyiasat isu biasa yang dihadapi apabila menggunakan penyegerakan.WaitGroup dan saluran dalam Go program, yang boleh menghalang fungsi utama daripada keluar selepas semua goroutine telah menyelesaikan tugas mereka. Mari kita terokai masalah dan penyelesaiannya.

Masalah: Tunggu Tak Terhingga

Dalam contoh yang disediakan, fungsi utama menggunakan penyegerakan.WaitGroup dan saluran (fetchedSymbols) untuk mengurus gorout serentak yang mengambil dan menyimpan sebut harga saham. Semasa goroutine menyelesaikan tugas mereka, program itu digantung selama-lamanya tanpa keluar.

Isu: Saluran Tidak Tertutup

Penyebabnya ialah gelung julat dalam fungsi utama . Mengulangi saluran fetchedSymbols menyekat kemajuan kerana saluran itu tidak pernah ditutup. Akibatnya, fungsi utama menunggu selama-lamanya untuk nilai baharu dihantar melalui saluran, walaupun semua nilai telah diterima.

Penyelesaian: Menutup Saluran

Untuk menyelesaikan isu ini, adalah penting untuk menutup saluran fetchedSymbols setelah semua goroutine menyelesaikan tugas mereka. Ini memberi isyarat kepada gelung julat bahawa tiada lagi nilai untuk diterima, membenarkan lelaran ditamatkan dan fungsi utama diteruskan.

Satu pendekatan ialah menggunakan kaedah Tunggu penyegerakan.WaitGroup untuk memberi isyarat apabila semua goroutine telah selesai. Satu goroutine boleh dilancarkan untuk menunggu WaitGroup mencapai sifar dan kemudian menutup saluran.

<code class="go">go func() {
    wg.Wait()
    close(fetchedSymbols)
}()</code>
Salin selepas log masuk

Dengan pengubahsuaian ini, gelung julat dalam fungsi utama akhirnya akan mencapai penghujung saluran, membenarkan atur cara untuk mencetak mesej "selesai" dan keluar dengan anggun.

Dengan memahami kepentingan menutup saluran apabila bekerja dengan penyegerakan.WaitGroup, pembangun Go boleh memastikan bahawa aplikasi mereka ditamatkan secara dijangka selepas melaksanakan tugasan serentak.

Atas ialah kandungan terperinci Mengapa Aplikasi Go Hang Apabila Menggunakan WaitGroups dan 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
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!