go-GC--内存分配-GMP-逃逸分析
go-GC--内存分配-GMP-逃逸分析
a...Z
golang php rust
展开
-
golang-GMP调度详解
传统并发 cpu切换浪费成本 线程状态 线程可以有三中状态 等待中(waiting) 这意味着线程停止并等待某件事情以继续,这可能是因为等待硬件(磁盘、网络)、操作系统(系统调用)或异步调用(原子、互斥)等原因,这些类型的延迟是性能下降的根本原因 待执行(Runnable) 这意味着线程需要内核上的时间,以便执行它指定的机器指令。如果有很多线程都需要时间,那么线程需要等待更长的时间才能获得执行。此外,由于更多的线程在竞争,每个线程获得的单个执行时间都会缩短。这种类型的调度延迟也可能导致性能下降。原创 2020-12-21 17:03:53 · 2654 阅读 · 3 评论 -
golang-逃逸分析
查看代码逃逸分析 go build -gcflags '-m -l' test4-tyfx.go 结果 -> % go build -gcflags '-m -l' test4-tyfx.go # command-line-arguments ./test4-tyfx.go:8:22: leaking param: name ./test4-tyfx.go:9:10: new(Student) escapes to heap go build -gcflags '-m -m -l' t原创 2020-12-07 17:06:42 · 528 阅读 · 0 评论 -
go-GC精华
—V1.3的mark标记—== STW暂停 标记不可达对象 清除不可达对象 STW暂停 标记不可达对象 STW暂停 标记不可达对象 缺点: STW 程序暂停,程序出现卡顿 标记整个heap 清除数据会产生heap碎片 —V1.5三色标记法– 遍历Root Set(非递归形式,值遍历一次)得到灰色节点,放入灰色标记表 灰色只是一种标记状态,最终只有黑色和白色 最终删除白色 三色标记为什么需要STW 三色标记无STW的问题 错误GC的情况,对象丢失 一个白色对象被原创 2020-11-11 22:20:35 · 185 阅读 · 0 评论 -
GC分配回收流程
GODEBUG=gctrace=1 go run ./main.go GODEBUG=gctrace=1 go run ./main.go gc 1 @0.068s 0%: 0.015+0.33+0.005 ms clock, 0.062+0.13/0.14/0.63+0.021 ms cpu, 4->4->0 MB, 5 MB goal, 4 P gc 2 @0.226s 0%: 0.020+0.30+0.003 ms clock, 0.083+0.18/0.12/0.41+0.012 m原创 2020-11-10 09:52:56 · 205 阅读 · 0 评论