Rumah > pembangunan bahagian belakang > Golang > Cara menggunakan saluran penimbal dalam pengaturcaraan serentak fungsi Golang

Cara menggunakan saluran penimbal dalam pengaturcaraan serentak fungsi Golang

WBOY
Lepaskan: 2024-04-17 12:06:01
asal
846 orang telah melayarinya

Saluran buffer ialah cara yang berkesan untuk memindahkan data dengan selamat dalam pengaturcaraan serentak fungsi Go. Mereka mencipta penimbal saiz tetap untuk menyimpan data untuk dihantar atau diterima. Gunakan make untuk mencipta saluran penimbal dan nyatakan kapasiti. Goroutine pengeluar menggunakan chan

Cara menggunakan saluran penimbal dalam pengaturcaraan serentak fungsi Golang

Penggunaan saluran penimbal dalam pengaturcaraan serentak fungsi bahasa Go

Saluran penimbal sangat berguna dalam pengaturcaraan serentak fungsi bahasa Go, yang membolehkan data dihantar dengan selamat antara goroutin. Ia melakukan ini dengan mencipta penimbal saiz tetap yang menyimpan data untuk dihantar atau diterima.

Buat saluran penimbal

bufferedChannel := make(chan int, 10)
Salin selepas log masuk

10 di sini mewakili kapasiti penimbal, yang boleh menyimpan sehingga 10 integer. 10 表示缓冲区的容量,它可以存储最多 10 个整数。

goroutine 间的通信

生产者 goroutine 可以使用 chan<- 运算符向通道发送数据:

go func() {
    bufferedChannel <- 42
}()
Salin selepas log masuk

消费者 goroutine 可以使用 <-chan

Komunikasi antara goroutine

Groutine pengeluar boleh menggunakan operator chan<- untuk menghantar data ke saluran:

go func() {
    fmt.Println(<-bufferedChannel)
}()
Salin selepas log masuk

Groutine pengguna boleh menggunakan <-chan Operator menerima data daripada saluran:

package main

import (
    "fmt"
    "math/rand"
    "sync"
)

func main() {
    // 创建一个缓冲通道
    bufferedChannel := make(chan int, 10)

    // 生成随机数的 goroutine
    go func() {
        for i := 0; i < 100; i++ {
            bufferedChannel <- rand.Intn(100)
        }
        close(bufferedChannel) // 发送完成后关闭通道
    }()

    // 打印随机数的 goroutine
    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        for {
            value, ok := <-bufferedChannel
            if !ok {
                return // 通道已关闭
            }
            fmt.Println(value)
        }
    }()

    wg.Wait() // 等待消费者 goroutine 结束
}
Salin selepas log masuk
Contoh praktikal

Untuk menunjukkan penggunaan saluran penimbal, mari kita tulis atur cara mudah yang menjana nombor rawak daripada goroutine pengeluar dan menyerahkannya kepada goroutine pengguna untuk pemprosesan Cetak. 🎜🎜🎜Kodnya adalah seperti berikut: 🎜🎜rrreee🎜Dalam contoh ini, kami menetapkan kapasiti penimbal kepada 10, yang bermaksud bahawa goroutine pengeluar boleh menjana 10 nombor rawak secara selari tanpa menyekat. Gelung goroutine pengguna menerima nombor rawak daripada saluran sehingga saluran ditutup. 🎜

Atas ialah kandungan terperinci Cara menggunakan saluran penimbal dalam pengaturcaraan serentak fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan