Rumah  >  Artikel  >  pembangunan bahagian belakang  >  pelaksanaan baris gilir mesej golang

pelaksanaan baris gilir mesej golang

王林
王林asal
2023-05-15 09:40:071013semak imbas

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:

  1. Pemprosesan tak segerak: Aplikasi yang menghantar mesej tidak perlu menunggu aplikasi yang menerima mesej menyelesaikan pemprosesan dan boleh terus melaksanakan tugas lain.
  2. Penyahgandingan: Baris gilir mesej boleh menyahgandingkan kebergantungan antara aplikasi, menjadikan aplikasi digabungkan dengan lebih longgar, sekali gus mengurangkan risiko ranap sistem.
  3. Skalabiliti: Baris gilir mesej boleh dikembangkan secara mendatar untuk menyokong penambahan lebih banyak nod untuk memproses lebih banyak mesej.

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:

  1. Konkurensi saluran di Golang adalah selamat dan boleh mengendalikan akses serentak oleh berbilang goroutin.
  2. Saluran tidak memerlukan kebergantungan tambahan dan boleh digunakan dengan mudah dalam program Golang.
  3. Saluran di Golang memberikan kebolehbacaan dan kebolehselenggaraan yang baik, menjadikan kod mudah difahami dan diselenggara.

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. jobsSaluran digunakan untuk memberikan tugasan kerja kepada pekerja dan resultssaluran 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn