可扩展的 Go Scheduler 设计文档

原文 https://golang.org/s/go11sched 在 go 的 runtime 包下,阅读最重要的关于流程调度的文件 proc.go 时。贴了这个文档地址。 机翻一下: 可扩展的 Go Scheduler 设计文档 德米特里·维尤...

Go

Go GMP 大量源码解读

基于小徐先生的GMP文章,我在代码中增加了大量注释。方便对整个GMP源码的理解。 1 概念梳理1.1 线程通常语义中的线程,指的是内核级线程,核心点如下: (1)是操作系统最小调度单元; (2)创建、销毁、调度交由内核完成,cpu 需完成用户态与内核...

Go

G-M-P

GMP 最核心的几个概念可以在 go 源码的 /Users/lixuanshan/go/go1.21.8/src/runtime/runtime2.go 找到。这个路径里面有 下面我们看看他们的核心元素。

Go

Go 哨兵错误

有这种写法,定义一个全局变量的 error ,在用到的时候直接返回 1var ErrNotFound = errors.New("404") 这样写有个隐患,如果有人在某个方法里写了句 1errNotFound = nil ...

Go

Go json里的数字是什么类型?

直接说结论:json里的数字会被优先解析成 float 123456789101112131415jsonData := `{ "stringKey": "Hello, world", ...

Go

Go 函数参数为接口数组时

如果 func 要求入参为接口数组: func F(arr []IShape) 然后结构体X指针实现了这个接口: var _ IShape = &X{} 这时候这么写是会报错的: 12arr := []*X{...

Go

Go 实现接口到底加不加指针?

1234567891011121314type Person interface { Say()}type A struct{}type B struct{}func (x A) Sa...

Go

Goland刷LeetCode模板

Goland的 LeetCode 插件可以让我们在 IDE 非常方便地刷题。 下面的配置可以让你更好地利用这个插件 模板的配置但是如果每次都去写一个 Main 函数去本地调试,是很不方便的。 因此我们可以借助单测,把下面我的这个模板贴到插件配置即可:...

Go

Go 的位运算

Go 的位运算符 12345678910111213141516// 这四个就不介绍了&|>><<//^ 异或 位不一样则为1a := 5 // 二进制表示为 101b := 3 // 二进制表示为 011...

Go

Go GC

三色标记法基本原理 从程序根节点开始扫描,扫描到的标记为灰色。 广度优先的原则,从灰色标记表中,遍历所有灰色节点的下一级,将其标记为灰色。上一轮灰色表中的全部放入黑色表。 依次循环上一步。 最终白色节点说明没有被访问,需要回收。 这时候我们...

Go
123