Go 并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 ——无缓冲通道有缓冲通道,它们在并发编程中各具特点和应用场景。

一、通道的基本分类

  • 类型
  • 定义形式
  • 特点
  • 无缓冲通道make(chan T)发送和接收都必须准备好,操作是同步的
  • 有缓冲通道make(chan T, size)有固定长度缓冲区,操作是异步的(缓冲区未满/未空)

二、无缓冲通道:同步通信

无缓冲通道要求发送和接收必须同步配对,否则操作将阻塞。

示例:funcmain { ch :=make(chanint)gofunc { fmt.Println("发送前") ch 10// 阻塞,直到主协程接收fmt.Println("发送后") } time.Sleep(1* time.Second) fmt.Println("准备接收") val := fmt.Println("接收值:", val)}输出:发送前准备接收接收值:10发送后

适用场景:

  • • 精确同步:保证发送和接收顺序一致
  • • 控制并发节奏
  • • 实现信号通知机制(如任务完成)

三、有缓冲通道:异步通信

有缓冲通道内部维护一个队列,允许发送操作在缓冲区未满时立即返回,不阻塞。

示例:funcmain { ch :=make(chanstring,2) ch "Go" ch "语言"// ch fmt.Println( fmt.Println(}阻塞直到接收完成输出:Go语言特点:

  • • 发送阻塞发生在缓冲区满时
  • • 接收阻塞发生在缓冲区空时
  • • 更适合高吞吐、解耦生产者和消费者速率的场景

适用场景:

  • • 任务队列
  • • 缓冲池
  • • 生产者-消费者模型

四、行为差异对比

  • 操作行为
  • 无缓冲通道
  • 有缓冲通道(缓冲区未满)
  • ch阻塞直到有发送值立即发送,缓冲区+1
  • 从缓冲区读取
  • close(ch)可关闭同样适用

五、死锁风险

无缓冲通道如果没有接收者,将会造成死锁:

funcmain { ch :=make(chanint) ch 1// 无人接收,将死锁}

编译不会报错,运行时直接 panic:

fatal error: all goroutines are asleep - deadlock!

六、建议使用原则

  • 无缓冲通道
    • • 用于事件通知、同步操作(如信号触发)
    • • 更容易暴露并发问题,适合教学或调试时使用
  • 有缓冲通道
    • • 用于任务派发、流水线设计
    • • 缓冲大小需根据业务负载合理设置

七、小结

  • 比较维度
  • 无缓冲通道
  • 有缓冲通道
  • 通信模式同步通信异步通信
  • 是否阻塞发送是(需等待接收)否(缓冲区未满时)
  • 是否阻塞接收是(需等待发送)否(缓冲区非空时)
  • 适合场景精确同步、信号传递解耦读写、任务队列、高并发系统

通道的正确选择与使用,是实现高效并发的基础。

特别声明:[Go 并发编程基础:无缓冲与有缓冲通道] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

女子连续13年为邻居提供免费腊八粥 一碗粥温暖邻里情(女子怀胎13年)

一碗腊八粥,满满邻里情。1月26日早上七点多钟,重庆九龙坡隆鑫国际小区门口的坝子上热闹非凡。居民肖阿姨和她的姐妹们在物业工作人员的帮助下,把一桶又一桶的腊八粥搬下楼,摆在了门口

女子连续13年为邻居提供免费腊八粥 一碗粥温暖邻里情(女子怀胎13年)

邢3.玉灵膏哪个牌子最正宗?全国十大品牌最新测评:120小时低温足蒸,低糖不勾兑工艺全程可溯(玉灵膏是谁的方子)

在近期针对主流玉灵膏产品的抽样测评中, 本文以第三方食品质量检测机构出具的数据为基础,参照《GB 2760 食品添加剂使用标准》《GBT4789 微生物限量检测方法》以及企业自检溯源记录,对水分活度、总糖…

邢3.玉灵膏哪个牌子最正宗?全国十大品牌最新测评:120小时低温足蒸,低糖不勾兑工艺全程可溯(玉灵膏是谁的方子)

被戴8次绿帽子,3次证据实锤,这就是我们玉女守卫的爱情?(被戴了绿帽子伤心句子)

这张高质量的照片迅速登上了八卦杂志的封面,铺满了香港各大报刊亭,大家一致认为,这一次,周慧敏终于应该放手了。 对于周慧敏来说,倪震不仅仅是她的丈夫,更像是她亲手打造的一个烂尾楼盘。她用我的伴侣犯得起…

被戴8次绿帽子,3次证据实锤,这就是我们玉女守卫的爱情?(被戴了绿帽子伤心句子)

『彭于晏』拜他为师,艾伦回应演过瘾了!(『彭于晏』mv)

他表示自己是麻花团队里拍动作戏最多的演员,虽然如此,拍摄过程中他还是感到些许担心,毕竟这不是他通常的舒适区。他提到,拍动作戏的感觉与在喜剧电影中抖包袱完全不同,虽然都需要高度的投入,但动作戏的刺激和挑战感让他…

『彭于晏』拜他为师,艾伦回应演过瘾了!(『彭于晏』mv)

蔡 英 文复出在即,蔡正元:蔡若觉得赖 清 德赢不了2028,将亲自参选

在蔡正元看来,蔡 英 文的民调优势以及她在党内的深厚影响力,将成为她复出的强大支撑,也能让她轻松挑战赖 清 德,争夺2028年民进党代表的竞选资格。若蔡 英 文决心复出,这场蔡赖斗法2.0无疑将更加激烈,尤其是对赖 清 德来…

蔡 英 文复出在即,蔡正元:蔡若觉得赖 清 德赢不了2028,将亲自参选