文章
54
标签
57
分类
6
首页
归档
标签
分类
关于
so2bin
Python GC
返回首页
首页
归档
标签
分类
关于
Python GC
发表于
2024-01-28
|
更新于
2026-04-07
|
总字数:
0
|
阅读时长:
1分钟
|
浏览量:
文章作者:
so2bin
文章链接:
https://so2bin.github.io/2024/01/28/Python/Python%20GC/
版权声明:
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议。转载请注明来源
so2bin
!
GC
Python
上一篇
Go GMP and Scheduler
资料 https://medium.com/@sanilkhurana7/understanding-the-go-scheduler-and-looking-at 1-how-it-works-e431a6daacf https://segmentfault.com/a/1190000041860912/en 结构原理 G:协程,P:processor,M:系统线程,M绑定一个P才能执行G; P的数据是控制着Go的并发能力,由环境变量GOMAXPROCESS控制数量,线程数一般不配置,但也有一个底层的函数可设置(SetMaxThreads),M默认上限是10000; P的存在是为了实现G的调度和M/G之间M:N的关系; P有一个local queue,无锁,当P的local queue无G时,会从Global queue取,此时需要用锁,而如果Global queue也无G时,会走work stealing,尝试从其它P的local queue上找G运行; G的抢占调度是基于时间片,即如果G长时间连续运行超过10ms,则会通过系统信号SIGURG强制调度该协程;...
下一篇
Go 内存模型
架构分层架构 Go的页单元大小 :8KB,linux操作系统:4KB; 如下图所示,分了三层来管理 mcache: 每个P一个,为每个mspan额外缓存了一个,无锁; mcentral: 分了67个span,从8B-32B,细粒度锁; mheap: 全局唯一; 三类对象 tiny 微对象,<=8B,通过P的专属tinyAllocator分配,依次从:mcache tiny -> mcache span -> mcentral -> mheap -> VM分配; small 小对象,<=32KB, 依次从:mcache span -> mcentral -> mheap -> VM分配; large 大对象,>32KB,依次从:mcentral -> mheap -> VM分配;
相关推荐
2024-01-28
Go GC
Go1.5 标记删除(Mark and Sweep)原理 进入STW(Stop The World)阶段 遍历整个heap,排查未被引用的对象,并标记; 暂停STW 执行Sweep清除 缺点 STW会让Go程序暂停,程序出现卡顿 标记需要扫描整个heap 清除数据会产生heap碎片 Go1.8 三色标记法 + 写入屏障三色标记法原理 维护三个标记表:白色,灰色,黑色 程序初始时,所有对象标记为白色 从Root Set开发,每次只遍历一层,标记该层的对象为灰色(对象从白色表中移到灰色表) 然后,以灰色标记表开始,遍历该表中的对象,将从这些对象开始的可达到对象(走一步),标记为灰色,同时灰色表中已经遍历过的对象,标记为黑色(对象从灰色表中移到黑色表) 循环上一步,继续遍历灰色表,直到灰色表中无任何对象 剩下的白色即为需要删除的对象 上述过程,仍然需要STW,否则会出现并发导致的引用关系错乱,导致资源被错误的GC删除 写入屏障原理 三色标记被破坏的情况有两种: 一个白色对象被黑色对象引用 灰色对象与它的可达白色对象关系遭到破坏(灰色同时丢失了该白色) 谷歌提出了两个...
so2bin
专注于AI框架、平台、架构、k8s、Go、Python领域
文章
54
标签
57
分类
6
Follow Me
最新文章
Claude Code OpenTelemetry 可观测性体系深度分析
2026-04-07
Hexo Tag Plugins 写法速查
2026-04-07
nano banana 技术风格
2026-01-05
架构治理
2025-10-22
OPA
2025-04-25