Rumah > Artikel > pembangunan bahagian belakang > Bagaimana Membaca Berbilang Saluran Secara serentak di Golang?
Membaca Berbilang Saluran Serentak di Golang
Apabila bekerja dengan konkurensi di Golang, tugas sering dibahagikan kepada berbilang goroutine yang berkomunikasi melalui saluran. Dalam situasi di mana beberapa goroutine menghasilkan nilai untuk digunakan oleh penerima tunggal, keperluan timbul untuk saluran yang mengumpul data daripada pelbagai sumber secara serentak. Artikel ini menangani keperluan ini dengan meneroka pendekatan yang cekap untuk membina saluran "mana-mana-satu" sedemikian dalam Go.
Memahami Cabaran
Pertimbangkan dua goroutine, numgen1 dan numgen2, menulis nombor untuk memisahkan saluran, num1 dan num2, masing-masing. Matlamatnya adalah untuk mencipta proses baharu, addnum, yang menjumlahkan nombor yang diterima daripada saluran ini.
Penyelesaian yang Dicadangkan
Percubaan awal mungkin melibatkan penggunaan operasi terima individu pada kedua-dua saluran dalam satu goroutine:
func addnum(num1, num2, sum chan int) { done := make(chan bool) go func() { n1 := <-num1 done <- true }() n2 := <-num2 <-done sum <- n1 + n2 }
Walau bagaimanapun, pendekatan ini mengalami isu asas: ia hanya membaca dari satu saluran pada satu masa, menunggu setiap nilai sebelum meneruskan ke yang seterusnya.
Pendekatan Lebih Cekap
Untuk mendayakan bacaan serentak daripada berbilang saluran, pernyataan pilihan boleh digunakan. Konstruk ini membenarkan goroutine menunggu operasi pada berbilang saluran serentak:
func main() { c1 := make(chan int) c2 := make(chan int) out := make(chan int) go func(in1, in2 <-chan int, out chan<- int) { for { sum := 0 select { case sum = <-in1: sum += <-in2 case sum = <-in2: sum += <-in1 } out <- sum } }(c1, c2, out) }
Dalam contoh ini, penyataan pilih terus menunggu data pada c1 atau c2. Apabila nilai diterima daripada satu saluran, ia ditambah kepada jumlah, yang kemudiannya dikeluarkan kepada saluran keluar.
Kesimpulan
Dengan menggunakan penyata pilih, adalah mungkin untuk membuat saluran "mana-mana-satu" di Golang, membenarkan berbilang gorout menulis ke saluran tunggal secara serentak. Pendekatan ini membolehkan komunikasi dan pengagregatan data yang cekap dalam sistem serentak yang kompleks.
Atas ialah kandungan terperinci Bagaimana Membaca Berbilang Saluran Secara serentak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!