在Go中,缓冲通道是否有任何订单保证?
例如:您有两个共享频道的goroutine A和B. 当B从中读取数据时,将数据推送到通道.您是否有必要B将读取数据按照A将其放入频道的顺序?
据我所知,如果有多个生产者或消费者,订单可能是非确定性的,但我特别询问只有1个生产者和1个消费者.
我在多个非缓冲通道上使用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)