图解Go的channel底层原理
Posted 菜刚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解Go的channel底层原理相关的知识,希望对你有一定的参考价值。
废话不多说,直奔主题。
channel的整体结构图
简单说明:
buf
是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表sendx
和recvx
用于记录buf
这个循环链表中的发送或者接收的indexlock
是个互斥锁。recvq
和sendq
分别是接收(<-channel)或者发送(channel <- xxx)的goroutine抽象出来的结构体(sudog)的队列。是个双向链表
源码位于/runtime/chan.go
中(目前版本:1.11)。结构体为hchan
。
type hchan struct
qcount uint // total data in the queue
dataqsiz
以上是关于图解Go的channel底层原理的主要内容,如果未能解决你的问题,请参考以下文章