Golang ialah bahasa pengaturcaraan sumber terbuka yang sesuai untuk mencipta aplikasi rangkaian berprestasi tinggi dan sistem teragih seperti baris gilir mesej. Dalam artikel ini, kami akan meneroka cara melaksanakan baris gilir mesej menggunakan Golang.
Apakah itu baris gilir mesej?
Dalam sistem teragih, aplikasi selalunya perlu berkongsi data antara nod yang berbeza. Baris gilir mesej ialah cara biasa untuk menghantar data dari satu nod ke nod yang lain. Dalam baris gilir mesej, data dipanggil mesej, penghantar mesej meletakkan mesej ke dalam baris gilir, dan penerima mesej mendapat mesej daripada baris gilir.
Baris gilir mesej mempunyai kelebihan berikut:
Baris gilir mesej di Golang
Golang menyediakan mekanisme saluran terbina dalam, yang menyediakan cara mudah untuk melaksanakan baris gilir mesej. Data dalam baris gilir dipanggil mesej dan dihantar melalui saluran. Saluran di Golang adalah serupa dengan paip dalam Unix/Linux, tetapi ia boleh menghantar data antara gorouti yang berbeza.
Melaksanakan baris gilir mesej melalui saluran mempunyai kelebihan berikut:
Bagaimana untuk menggunakan saluran untuk melaksanakan baris gilir mesej?
Berikut ialah contoh mudah yang menunjukkan cara melaksanakan baris gilir mesej menggunakan saluran Golang:
package main import ( "fmt" ) func main() { // 创建一个通道 queue := make(chan string, 2) // 将消息放入队列 queue <- "first message" queue <- "second message" // 从队列中获取消息 fmt.Println(<-queue) fmt.Println(<-queue) }
Dalam kod di atas, kami mula-mula mencipta saluran dengan saiz penimbal 2. Kemudian kami meletakkan dua mesej ke dalam baris gilir. Akhirnya, kami mendapat mesej daripada baris gilir dan mencetaknya ke konsol.
Pernyataan fmt.Println(<-queue)
pertama akan mengeluarkan mesej pertama dalam baris gilir: "mesej pertama". Pernyataan fmt.Println(<-queue)
kedua akan mengeluarkan mesej kedua dalam baris gilir: "mesej kedua".
Dalam contoh di atas, kerana saiz penimbal saluran ialah 2, dua mesej boleh dimasukkan ke dalam baris gilir. Apabila bilangan mesej dalam baris gilir mesej melebihi saiz penimbal, terus menambah mesej pada baris gilir akan menyebabkan aplikasi disekat.
Disebabkan sifat menyekat saluran, kami boleh menggunakan saluran untuk melaksanakan baris gilir mesej yang lebih maju. Sebagai contoh, kita boleh dengan mudah melaksanakan kumpulan pekerja untuk menetapkan tugas kerja kepada pekerja. Contohnya, kod berikut menunjukkan cara melaksanakan kumpulan pekerja menggunakan saluran dan goroutin:
package main import ( "fmt" "time" ) 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() { jobs := make(chan int, 100) results := make(chan int, 100) // 启动3个工作者 for w := 1; w <= 3; w++ { go worker(w, jobs, results) } // 生成9个工作任务,将它们分配给工作者 for j := 1; j <= 9; j++ { jobs <- j } close(jobs) // 输出所有的结果 for a := 1; a <= 9; a++ { <-results } }
Dalam contoh di atas, kami mula-mula mencipta dua saluran, jobs
dan results
. jobs
Saluran digunakan untuk memberikan tugasan kerja kepada pekerja dan results
saluran digunakan untuk mengembalikan hasil tugasan kerja kepada aplikasi. Kemudian, kami memulakan tiga pekerja, yang menerima tugas kerja daripada saluran jobs
dan menghantar hasil pengiraan ke saluran results
. Fungsi
main()
menjana 9 tugasan kerja dan menyerahkannya kepada pekerja. Akhirnya, fungsi main()
mendapat semua hasil daripada saluran results
. Bilangan pekerja boleh diselaraskan berdasarkan permintaan.
Kesimpulan
Mekanisme saluran Golang menjadikannya sangat mudah untuk melaksanakan baris gilir mesej. Ia menyediakan kaedah yang selamat, mudah, fleksibel dan ringan untuk melaksanakan penghantaran mesej dalam sistem yang diedarkan. Di Golang, kami boleh menggunakan saluran untuk melaksanakan baris gilir mesej asas, dan kami juga boleh menggunakan saluran dan goroutin untuk melaksanakan baris gilir mesej yang lebih maju, seperti kumpulan pekerja, dsb. Saluran Golang menyediakan cara yang mudah dan cekap untuk mencapai penghantaran mesej yang pantas dan boleh dipercayai, yang boleh menjadikan reka bentuk dan pembangunan sistem teragih lebih mudah.
Atas ialah kandungan terperinci pelaksanaan baris gilir mesej golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!