Memahami "lontaran: Semua Goroutine Tidur - Kebuntuan" dalam Go
Semasa melaksanakan program Go yang ringkas, anda mungkin menghadapi mesej ralat "buang: semua goroutine sedang tidur - kebuntuan!" Ralat ini timbul apabila semua gorout yang sedang berjalan sedang menunggu saluran komunikasi yang tidak pernah menerima atau menghantar data. Untuk menangani isu ini, adalah penting untuk memahami punca di sebalik kebuntuan ini.
Dalam program Go yang diberikan, goroutine dihasilkan untuk mengira jumlah tiga integer. Goroutine utama menghantar integer ini ke saluran dan menunggu hasilnya. Walau bagaimanapun, goroutine tersekat dalam gelung tak terhingga kerana saluran tidak ditutup.
Untuk gelung julat tamat dalam goroutine, ia memerlukan saluran tertutup. Tetapi oleh kerana saluran kekal terbuka, gelung berterusan selama-lamanya. Ini membawa kepada semua gorout menunggu acara yang tidak akan berlaku, mengakibatkan kebuntuan.
Untuk menyelesaikan isu ini, adalah penting untuk menutup saluran apabila pemindahan data selesai. Dalam versi program yang diubah suai, saluran kedua diperkenalkan untuk menghantar semula hasilnya. Jumlah fungsi menghantar jumlah integer kembali melalui saluran baharu ini, dan goroutine utama menerima hasil daripada saluran ini. Selain itu, saluran asal ditutup untuk menandakan tamatnya pemindahan data.
Dengan mengubah suai program dengan cara ini, goroutin tidak lagi tersekat dalam gelung tak terhingga dan kebuntuan dihalang. Ini menyerlahkan kepentingan menutup saluran dengan sewajarnya untuk mengelakkan kebuntuan dalam program Go.
Atas ialah kandungan terperinci Mengapa Program My Go Melemparkan 'Semua Goroutine Tidur - Kebuntuan?'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!