图解Go的channel底层原理

Posted 菜刚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解Go的channel底层原理相关的知识,希望对你有一定的参考价值。

废话不多说,直奔主题。

channel的整体结构图

简单说明:

  • buf是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表
  • sendxrecvx用于记录buf这个循环链表中的发送或者接收的index
  • lock是个互斥锁。
  • recvqsendq分别是接收(<-channel)或者发送(channel <- xxx)的goroutine抽象出来的结构体(sudog)的队列。是个双向链表

源码位于/runtime/chan.go中(目前版本:1.11)。结构体为hchan

type hchan struct 
   
    qcount   uint           // total data in the queue
    dataqsiz 

以上是关于图解Go的channel底层原理的主要内容,如果未能解决你的问题,请参考以下文章

图解Go引用的底层实现

图解Go引用的底层实现

图解Go引用的底层实现

图解Go引用的底层实现

图解go反射实现原理

最全Go select底层原理,一文学透高频用法