Kesan mod komunikasi saluran paip pada prestasi fungsi bahasa Go: Talian paip yang tidak ditimbal mempunyai prestasi paling teruk kerana ia menyekat pengirim. Paip tertimbal menghapuskan sekatan penghantar dan berprestasi jauh lebih baik daripada paip tidak tertimbal. Pemilihan paip berprestasi terbaik dan membolehkan penerimaan data yang cekap daripada berbilang paip.
Penilaian prestasi fungsi di bawah mod komunikasi saluran paip yang berbeza dalam bahasa Go
Pengenalan
Pipeline ialah concurrency primitif yang berkuasa dalam bahasa Go. Mereka membenarkan pemindahan data yang selamat dan cekap antara fungsi serentak. Walau bagaimanapun, mod komunikasi saluran paip yang berbeza boleh memberi kesan yang ketara ke atas prestasi fungsi. Artikel ini akan menilai tiga corak komunikasi paip biasa dan memberikan contoh praktikal untuk menggambarkan perbezaannya.
Mod Komunikasi
Kami menilai tiga mod komunikasi saluran paip berikut:
Contoh Praktikal
Untuk menilai corak komunikasi ini, kami mencipta ujian fungsi hantar-terima yang mudah. Fungsi ini menyalurkan tatasusunan rawak ke fungsi lain dalam ruang alamat yang sama, yang bertanggungjawab untuk mencetak tatasusunan ini. Kami mengulangi ujian menggunakan jenis saluran paip yang berbeza dan merekodkan masa pelaksanaan setiap ujian.
Keputusan
Keputusan percubaan kami menunjukkan bahawa:
Contoh Kod
Kod berikut menunjukkan pelaksanaan mod komunikasi paip buffer:
import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup ch := make(chan int, 10) // 缓冲区大小为 10 // 发送函数 wg.Add(1) go func() { defer wg.Done() for i := 0; i < 100000; i++ { ch <- i } close(ch) }() // 接收函数 wg.Add(1) go func() { defer wg.Done() for { v, ok := <-ch if !ok { return } fmt.Println(v) } }() wg.Wait() }
Atas ialah kandungan terperinci Penilaian prestasi fungsi mod komunikasi saluran paip yang berbeza di golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!