golang 并发编程基础篇(一)

48次阅读

共计 393 个字符,预计需要花费 1 分钟才能阅读完成。

channel 的阻塞的情况
无缓冲 channel 的阻塞

阻塞是一个听上去逼格很高的一个词,其实就是程序停了,杵在那儿等待程序继续运行的条件,这个条件不发生的话,程序就死翘翘了。
无缓冲 channel 阻塞的例子之常见的 channel 误用

无缓冲 channel 阻塞的条件:发送方和接收方需要同时准备好,否则对方的协程就会阻塞。在 ch <- “cmd.0″ 这个位置,因为没有接收 channel 数据的协程,一直阻塞,所以,程序不会往下执行 go func,自然就会报错:死锁
解决这个死锁。只要先把接收方协程起了,再往 channel 发送就行,或者使用有缓冲的 channel。

有缓冲 channel 的阻塞
接收 channel 数据的协程阻塞

发送 channel 数据的协程阻塞

有缓冲 channel 阻塞总结,channel 为空时,接收方阻塞,channel 满时,发送方阻塞。有缓冲 channel 的这个特性可以用在构建连接池上。

正文完
 0