Rumah >pembangunan bahagian belakang >Golang >Panduan praktikal untuk Select Channels Go pengaturcaraan serentak menggunakan golang
Panduan praktikal untuk menggunakan golang untuk Select Channels Go concurrent programming
Pengenalan:
Dalam aplikasi komputer moden, High concurrency ialah menjadi semakin penting. Untuk menggunakan sepenuhnya prestasi komputer, kita perlu menggunakan pengaturcaraan serentak untuk mencapai multitasking. Golang ialah bahasa pengaturcaraan berprestasi tinggi yang menyokong pengaturcaraan serentak Ia menyediakan mekanisme yang dipanggil "Saluran" untuk melaksanakan komunikasi serentak. Dengan menggunakan penyataan Saluran dan Pilih, kami boleh melaksanakan pengaturcaraan serentak dengan mudah. Artikel ini akan memperkenalkan anda kepada cara menggunakan penyataan Saluran dan Pilih dalam Golang untuk pengaturcaraan serentak dan memberikan contoh kod khusus.
1. Konsep asas Saluran
Di Golang, Saluran ialah mekanisme komunikasi yang digunakan untuk memindahkan data antara Goroutines (fungsi yang dilaksanakan secara serentak). Ia boleh dianggap sebagai paip antara Goroutine yang melaluinya data mengalir. Saluran mempunyai dua sifat penting: menyekat dan penyegerakan.
2 Gunakan pernyataan Pilih
Di Golang, pernyataan Pilih ialah mekanisme untuk mengendalikan berbilang operasi Saluran. Ia serupa dengan pernyataan suis, tetapi digunakan untuk mengendalikan operasi baca dan tulis pada Saluran.
Pilih sintaks pernyataan
select { case channel1 <- data1: // 当 channel1 可用时执行 case data2 := <-channel2: // 当 channel2 可用时执行 case data3, ok := <-channel3: // 当 channel3 可用时执行 // 如果 Channel 被关闭,ok 会被设置为 false,否则为 true default: // 如果没有任何 Channel 操作可用,则执行 default 语句块 }
Berikut ialah beberapa garis panduan amalan untuk menggunakan Penyataan Saluran dan Pilih:
ch := make(chan int)
ch <- data // 发送数据 data := <-ch // 接收数据
select { case ch1 <- data1: // 当 ch1 可用时执行发送操作 case data2 := <-ch2: // 当 ch2 可用时执行接收操作 }
close(ch)
func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("Worker", id, "started job", j) time.Sleep(time.Second) fmt.Println("Worker", id, "finished job", j) results <- j * 2 } } func main() { // 创建输入和输出 Channels jobs := make(chan int, 100) results := make(chan int, 100) // 创建并发 Goroutines for w := 1; w <= 3; w++ { go worker(w, jobs, results) } // 发送任务到输入 Channel for j := 1; j <= 9; j++ { jobs <- j } close(jobs) // 输出结果 for a := 1; a <= 9; a++ { <-results } }
Rujukan:
"Concurrency in Go", Blog The Go, [Dalam Talian]. is-not-parallelism.Atas ialah kandungan terperinci Panduan praktikal untuk Select Channels Go pengaturcaraan serentak menggunakan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!