相关疑难解决方法(0)

缓冲通道是否维持秩序?

在Go中,缓冲通道是否有任何订单保证?

例如:您有两个共享频道的goroutine A和B. 当B从中读取数据时,将数据推送到通道.您是否有必要B将读取数据按照A将其放入频道的顺序?

据我所知,如果有多个生产者或消费者,订单可能是非确定性的,但我特别询问只有1个生产者和1个消费者.

channel go

8
推荐指数
1
解决办法
6569
查看次数

golang:当涉及多个频道时,选择如何工作?

我在多个非缓冲通道上使用select时发现了

select {
case <- chana:
case <- chanb:
}
Run Code Online (Sandbox Code Playgroud)

即使两个通道都有数据,但在处理此选择时,如果chana和case chanb处于不平衡的调用.

package main

import (
    "fmt"
    _ "net/http/pprof"
    "sync"
    "time"
)

func main() {
    chana := make(chan int)
    chanb := make(chan int)

    go func() {
        for i := 0; i < 1000; i++ {
            chana <- 100 * i
        }
    }()

    go func() {
        for i := 0; i < 1000; i++ {
            chanb <- i
        }
    }()

    time.Sleep(time.Microsecond * 300)

    acount := 0
    bcount := 0
    wg := …
Run Code Online (Sandbox Code Playgroud)

select scheduling channel go goroutine

8
推荐指数
1
解决办法
6534
查看次数

标签 统计

channel ×2

go ×2

goroutine ×1

scheduling ×1

select ×1