go源码分析

cc 发布于2020年11月09日 ∣ 约409字 · 需1分钟 阅读()

了解底层原理,可以根据底层原理书写更优质的代码

几个数据类型实现原理,数据转换及算法优化

channel/interface/defer/error

并发调试度原理,go一个很大的优势就是用串行的方法写并发的代码

GMP,协程,线程,管理器

g(runtime2.go)等待链表sudog(runtime2.go),特殊的池分配,用acquireSudog/releaseSudog来分配与释放g

p可能是在运行代码也可能是运行调度scheduler,或者是被gc协程占用

startTheWorld时p会保持他的运行队列,gc完后会重新调度非空p运行

context如何中断

context的设计是为了处理任务取消/中断时如何管理子协程问题。协程一但开启默认情况下会把整个子任务执行完,这样如果父协程中途取消任务或被中断时,子协程是不无法感知,仍然会继业执行它的子任务,白白浪费计算资源。

这里仍然有个问题,就是子协程里必须手动添加ctx.Done()处理,对于耗时的任务又怎么插入监测点呢?