Go语言channel相关结构体sudog的含义及sudo缩写含义问询
Go语言
sudog结构体命名含义解答 基础作用说明
sudog是Go runtime层的核心辅助结构体,用于代表阻塞在特定资源等待队列中的goroutine实体,你给出的结构体定义中各核心字段的作用对应如下:
g:指向绑定的真实goroutine本体(g结构体实例)isSelect:标记该sudog是否属于select语句的某一个case场景next/prev:等待队列链表的前后指针,用于将sudog挂载到channel等资源的等待队列中elem:指向待收发数据的内存地址,比如channel收发操作中要传递的元素的指针
命名含义解答
很多开发者会误以为sudog里的sudo和Linux下的超级用户权限命令sudo同源,二者实际毫无关联:
这里的sudo是英文单词 pseudo 的谐音简化拼写,pseudo的本意是「伪的、代理的、辅助的」,sudog的完整表意就是伪goroutine / 代理goroutine。
这个命名刚好匹配它的定位:它不是goroutine本体,只是goroutine在某个具体等待队列中的代理封装。之所以需要这种封装,是因为同一个goroutine可能同时需要挂载到多个等待队列中(比如参与select语句的多个case判断时),而goroutine本体的g结构体没有内置多链表挂载需要的多组前后指针,必须用sudog这种轻量结构体承载队列上下文。
type sudog struct{ g *g isSelect bool next *sudog prev *sudog elem unsafe.Pointer //data element ... }
内容的提问来源于stack exchange,提问作者Jerry An
相关产品推荐
相关产品推荐

