Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang melaksanakan baris gilir penimbal

Golang melaksanakan baris gilir penimbal

WBOY
WBOYasal
2023-05-13 10:58:37591semak imbas

Baris gilir penimbal ialah struktur data biasa yang memainkan peranan penting dalam program berbilang benang. Golang menyediakan saluran terbina dalam untuk melaksanakan baris gilir penimbal, yang boleh melaksanakan komunikasi dan pemindahan data antara rangkaian dengan mudah. Artikel ini akan memperkenalkan cara golang melaksanakan baris gilir penimbal.

  1. Pengenalan Saluran

Saluran ialah mekanisme dalam bahasa golang untuk komunikasi antara berbilang rangkaian. Saluran boleh dianggap sebagai paip yang melaluinya berbilang benang boleh menghantar dan menerima data. Menghantar dan menerima data dalam saluran adalah menyekat, yang bermaksud jika tiada data dalam saluran atau saluran penuh, penghantar atau penerima akan disekat. Saluran boleh dibuat menggunakan fungsi make, dengan sintaks berikut:

make(chan 数据类型, 缓冲区大小)

di mana jenis data ialah jenis data dalam saluran dan saiz penimbal adalah pilihan. Jika saiz penimbal tidak ditentukan, ia lalai kepada 0, iaitu saluran yang tidak ditimbal. Sintaks untuk mencipta saluran tidak buffer adalah seperti berikut:

make(chan 数据类型)
  1. Melaksanakan baris gilir penimbal

Dalam golang, baris gilir penimbal boleh dilaksanakan melalui saluran terbina dalam. Pelaksanaan khusus adalah seperti berikut:

package main

import "fmt"

func main() {
    // 创建缓冲队列
    queue := make(chan int, 10)

    // 发送数据到缓冲队列
    queue <- 1
    queue <- 2
    queue <- 3

    // 从缓冲队列中读取数据
    fmt.Println(<-queue)
    fmt.Println(<-queue)
    fmt.Println(<-queue)
}

Kod di atas mencipta saluran dengan saiz penimbal 10, menghantar tiga integer 1, 2 dan 3 ke saluran dan membaca tiga integer ini daripada saluran . Sintaks untuk membaca data ialah <-queue, yang bermaksud membaca data daripada saluran. Ambil perhatian bahawa jika operasi baca dilaksanakan sebelum operasi hantar, benang akan disekat.

Selain operasi membaca dan menghantar di atas, anda juga boleh menggunakan fungsi len(queue) untuk mendapatkan panjang baris gilir, yang digunakan untuk menentukan sama ada baris gilir penuh atau kosong.

  1. Pelaksanaan serentak corak pengeluar-pengguna

Baris gilir penampan biasanya digunakan untuk melaksanakan corak pengeluar-pengguna untuk memindahkan data antara berbilang rangkaian. Berikut ialah contoh program mudah yang melaksanakan satu pengeluar dan dua pengguna:

package main

import (
    "fmt"
    "time"
)

func producer(queue chan<- int) {
    // 生产者往队列中写入数据
    for i := 1; i <= 10; i++ {
        queue <- i
        fmt.Printf("生产者写入数据:%d
", i)
        time.Sleep(time.Millisecond * 100)
    }
}

func consumer1(queue <-chan int) {
    // 消费者1从队列中读取数据
    for {
        data := <-queue
        fmt.Printf("消费者1读取数据:%d
", data)
        time.Sleep(time.Millisecond * 200)
    }
}

func consumer2(queue <-chan int) {
    // 消费者2从队列中读取数据
    for {
        data := <-queue
        fmt.Printf("消费者2读取数据:%d
", data)
        time.Sleep(time.Millisecond * 200)
    }
}

func main() {
    // 创建缓冲队列
    queue := make(chan int, 5)

    // 启动生产者协程
    go producer(queue)

    // 启动两个消费者协程
    go consumer1(queue)
    go consumer2(queue)

    // 等待协程执行结束
    time.Sleep(time.Second * 10)
}

Program di atas mencipta saluran dengan saiz penimbal 5, memulakan coroutine pengeluar dan dua coroutine Pengguna. Coroutine pengeluar menulis data ke saluran, dan coroutine pengguna membaca data daripada saluran. Memandangkan saiz penimbal ialah 5, pengeluar boleh terus menulis data ke baris gilir apabila baris gilir tidak penuh. Coroutine pengguna membaca data daripada baris gilir setiap 200 milisaat dan mencetaknya. Selepas program tamat, coroutine utama menunggu sehingga semua coroutine selesai melaksanakan.

  1. Ringkasan

golang menyediakan saluran terbina dalam untuk melaksanakan baris gilir penimbal. Komunikasi dan pemindahan data antara pelbagai utas boleh dicapai melalui saluran, dengan itu merealisasikan model pengaturcaraan serentak seperti model pengeluar-pengguna. Pembangun boleh melaksanakan penyelesaian pengaturcaraan serentak mereka sendiri berdasarkan saluran terbina dalam golang.

Atas ialah kandungan terperinci Golang melaksanakan baris gilir penimbal. 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
Artikel sebelumnya:golang 1.7 saya tukarArtikel seterusnya:golang 1.7 saya tukar