Rumah >pembangunan bahagian belakang >Golang >Bagaimana Cara Membaca Data dengan Cekap dari Pelbagai Saluran serentak di Golang?
Bacaan Asynchronous dari Berbilang Saluran di Golang
In Go, Goroutines memainkan peranan penting dalam pengaturcaraan selari. Selalunya, adalah perlu untuk membaca data daripada berbilang saluran serentak untuk mencapai prestasi optimum.
Pertimbangkan senario berikut: Goroutines numgen1 dan numgen2 secara serentak menulis nombor ke saluran num1 dan num2, masing-masing. Tugas anda ialah mencipta Goroutine baharu, addnum, yang membaca daripada saluran ini, menambah nilainya dan menulis hasilnya pada saluran baharu, jumlah.
Pada mulanya, anda mungkin mencuba penyelesaian seperti ini:
func addnum(num1, num2, sum chan int) { done := make(chan bool) go func() { n1 := <-num1 // Read from channel done <- true // Signal completion }() n2 := <-num2 // Read from channel <-done // Wait for completion sum <- n1 + n2 // Write to destination channel }
Walau bagaimanapun, pendekatan ini adalah cacat kerana ia tidak menjamin bacaan serentak daripada kedua-duanya saluran.
Penyelesaian: Menggunakan pilihan
Penyelesaian yang lebih cekap melibatkan penggunaan kata kunci pilihan Go, yang membolehkan anda melakukan bacaan tanpa sekatan daripada berbilang saluran:
func addnum(num1, num2 <-chan int, sum chan<- int) { for { select { case n1 := <-num1: select { case n2 := <-num2: sum <- n1 + n2 default: // Store value back in channel num1 <- n1 } case n2 := <-num2: select { case n1 := <-num1: sum <- n1 + n2 default: // Store value back in channel num2 <- n2 } } } }
Dalam kod ini, gelung for berjalan selama-lamanya, mendengar data secara berterusan sama ada pada num1 atau num2. Apabila data diterima pada satu saluran, pilihan dalaman cuba membaca dari saluran lain. Jika berjaya, nilai ditambah dan dihantar ke saluran jumlah.
Nota:
Atas ialah kandungan terperinci Bagaimana Cara Membaca Data dengan Cekap dari Pelbagai Saluran serentak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!