Rumah > Artikel > pembangunan bahagian belakang > Mengapa Saluran Tidak Dibuffer dalam Pergi Membawa kepada Kebuntuan?
Kod yang disediakan menunjukkan dua goroutine berkomunikasi melalui saluran. Semasa satu saluran berjaya menghantar dan menerima data antara goroutine, kebuntuan berlaku apabila nilai tambahan dihantar ke salah satu saluran daripada fungsi utama.
Kebuntuan ini disebabkan oleh ketiadaan sebarang penimbal dalam saluran. Memandangkan saluran tidak dibuffer, setiap goroutine mesti bersedia untuk menghantar dan menerima data secara serentak. Apabila fungsi utama menghantar nilai kedua ke c1, goroutine pertama sedang menunggu untuk menerima daripada c2. Pada masa yang sama, goroutine kedua sedang menunggu untuk dihantar ke c1. Oleh itu, kedua-dua gorouti sedang menunggu yang lain untuk meneruskan, mengakibatkan kebuntuan.
Untuk nyahpepijat kebuntuan tersebut, beberapa teknik boleh digunakan:
Untuk mengelakkan kebuntuan dengan saluran tidak buffer, pertimbangkan untuk menambah penimbal pada di sekurang-kurangnya satu daripada saluran. Ini membolehkan satu goroutine mendahului yang lain, mengelakkan situasi kebuntuan. Sebagai alternatif, gunakan akses disegerakkan kepada saluran untuk memastikan bahawa hanya satu goroutine boleh menghantar atau menerima data pada satu masa.
Atas ialah kandungan terperinci Mengapa Saluran Tidak Dibuffer dalam Pergi Membawa kepada Kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!