go语言-channel

go语言-channel_第1张图片

go语言-channel_第2张图片

go语言-channel_第3张图片

go语言-channel_第4张图片

go语言-channel_第5张图片

go语言-channel_第6张图片

环形缓存可以降低GC得开销

go语言-channel_第7张图片

go语言-channel_第8张图片

channel使用得是mutex锁

互斥锁并不是排队发送/接收数据
互斥锁保护的hchan结构体本身
Channel并不是无锁的

go语言-channel_第9张图片

底层发送原理

c<- 关键字是一个语法糖
编译阶段,会把 c<- 转化为 runtime.chansend10
chansend10会调用 charsend0 方法

直接发送

go语言-channel_第10张图片

go语言-channel_第11张图片

go语言-channel_第12张图片

go语言-channel_第13张图片

go语言-channel_第14张图片

放入缓存

go语言-channel_第15张图片

go语言-channel_第16张图片
休眠等待

go语言-channel_第17张图片

go语言-channel_第18张图片

go语言-channel_第19张图片

底层接送原理

go语言-channel_第20张图片

go语言-channel_第21张图片

go语言-channel_第22张图片

go语言-channel_第23张图片

go语言-channel_第24张图片

go语言-channel_第25张图片

go语言-channel_第26张图片

go语言-channel_第27张图片

你可能感兴趣的:(Go,go)