小编Wei*_*uan的帖子

通道何时阻止goroutine

如果我定义了一个没有缓冲区的通道并向其中写入一个数据,它会立即阻塞吗(以便内核将寻找从该通道读取的另一个不受阻塞的goroutine),或者它会继续执行并在下次尝试某些代码时阻塞在尚未读取该通道时再次写入该通道?

以下是我编写的用于研究此问题的两段代码。

代码1:

package main

import "fmt"

func main() {
    c := make(chan int)
    go func() {
        for i := 0;i < 3; i++ {
            c <- i
            fmt.Printf("number %v inserted into channel\n", i)
        }
    }()
    for i := 0; i < 3; i++ {
        fmt.Printf("number poped from channel %v\n", <-c)
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

number 0 inserted into channel
number poped from channel 0
number poped from channel 1
number 1 inserted into channel
number 2 inserted into channel
number …
Run Code Online (Sandbox Code Playgroud)

go goroutine

-1
推荐指数
1
解决办法
63
查看次数

标签 统计

go ×1

goroutine ×1