Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Multipleks Pelbagai Saluran dengan Cekap dan Mengelakkan Gelagat Tidak Dijangka?
Pemultipleks Saluran
Soalan:
Dalam percubaan untuk mencipta pemultipleks saluran yang menggabungkan output berbilang saluran menjadi satu, pengaturcara menghadapi tingkah laku yang tidak dijangka dan mendapatkan panduan dengan perkara berikut soalan:
Jawapan:
Kod menggunakan gelung for untuk mencipta goroutine bagi setiap saluran. Walau bagaimanapun, pembolehubah c dikemas kini pada setiap lelaran gelung, menyebabkan goroutine kepada semua dibaca dari saluran yang sama. Untuk menyelesaikan masalah ini, saluran hendaklah dihantar terus ke goroutine:
for _, c := range channels { go func(c <-chan big.Int) { // ... }(c) }
Kod ini memulakan semua nilai output kepada "false", menyebabkan hanya nilai palsu dicetak. Ini boleh diatasi dengan menggantikan baris fmt.Println(l) dengan fmt.Println(l.String()).
Corak suapan disebabkan oleh ralat yang disebutkan di atas dalam kod, tempat goroutine cuba membaca daripada saluran yang sama. Pembetulan di atas harus menyelesaikan masalah ini dan membenarkan output seimbang daripada semua saluran input.
Pelaksanaan pemultipleks yang disediakan adalah asas pendekatan. Untuk senario yang memerlukan prestasi atau keselarasan yang lebih tinggi, pilihan alternatif mungkin mempertimbangkan penghantaran mesej melalui saluran atau primitif penyegerakan seperti mutex.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Multipleks Pelbagai Saluran dengan Cekap dan Mengelakkan Gelagat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!