chan的阻塞和非阻塞?

本文阅读 2 分钟
首页 golang 正文
题目来源:京东

答案:古尔班通

管道(chan)是Go在语言层面提供的协程间通信机制,比UNIX管道更易用也更轻便。chan可以使用内置函数make()创建无缓冲管道和带缓冲管道。
管道无缓冲区时,从管道读取数据会阻塞,直到有协程向管道写入数据。类似地,向管道写入数据也会阻塞,直到有协程从管道读取数据。
管道有缓冲区但缓冲区没有数据时,从管道读取数据也会阻塞,直到有协程写入数据。类似地,向管道写入数据时,如果缓冲区已满,那么也会阻塞,直到有协程从缓冲区中读出数据。
对于值为nil的管道,无论读写都会阻塞,而且是永久阻塞。
小结:
协程读取管道时,阻塞的条件有:
管道无缓冲区
管道缓冲区中无数据
管道的值为nil
协程写入管道时,阻塞的条件有:
管道无缓冲区
管道的缓冲区已满
管道的值为nil

本文来自投稿,不代表本站立场,如若转载,请注明出处:
了解中间件吗?有什么好处?
« 上一篇 09-17
Go 高并发的特点
下一篇 » 09-17

发表评论

发表评论