Golang Channel详解

一、原理 0. 简介 channel 分为有缓冲和无缓冲,或者阻塞和非阻塞,主要区别就在于是否有 容量capacity。 在 runtime 中是通过 hchan 这个结构体来表示的,它里面的主要成员可以理解成包含两个大部分:环形队列相关 和 sudog等待队列 相关。 对于有缓冲的 channel,会设置环形队列相关的参数,如已有的元素数量、容量、指向队列的指针等; 等待队列有发送等待队列和接受等待队列,他们分别在发送时 channel 已满、接收时 channel 为空的情况下,会将当前 goroutine 打包成一个 sudog 结构,添加到对应的队列中,直到条件符合时再被唤醒工作。 ...

April 9, 2021 · JemmyHu(hujm20151021@gmail.com)