Go 三色标记GC详解
# go gc GoV1.3- 普通标记清除法,整体过程需要启动 STW,效率极低。 GoV1.5- 三色标记法, 堆空间启动写屏障,栈空间不启动,全部扫描之后,需要重新扫描一次栈 (需要 STW),效率普通 GoV1.8 - 三色标记法,混合写屏障机制, 栈空间不启动,堆空间启动。整个过程几乎不需要 STW,效率较高。 # 标记清除 第一步,暂停程序业务逻辑,分类出可达和不可达的对象,然后做上标记。 第二步,开始标记,程序找出它所有可达的对象,并做上标记。 第三步,标记完了之后,然后开始清除未标记的对象。 第四步,停止暂停,让程序继续跑。然后循环重复这个过程,直到 process...
more...goroutine 调度器
# goroutine 调度器 https://learnku.com/articles/41728 # 背景 一个线程分为 “内核态 “线程和” 用户态 “线程 一个 “用户态线程” 必须要绑定一个 “内核态线程”,但是 CPU 并不知道有 “用户态线程” 的存在,它只知道它运行的是一个 “内核态线程”(Linux 的 PCB 进程控制块)。 内核线程依然叫 “线程 (thread)”,用户线程叫 “协程 (co-routine)”. 既然一个协程 (co-routine) 可以绑定一个线程 (thread),那么能不能多个协程 (co-routine) 绑定一个或者多个线程...
more...Go zerolog 使用
# Zero Allocation JSON Logger Zerolog https://github.com/rs/zerolog Zerolog 包提供了一个专用于 JSON 输出的快速且简单的 Logger 记录器。 Zerolog 的 API 旨在提供出色的开发人员体验和令人惊叹的性能。其独特的链接 API 允许 Zerolog 通过避免分配和反射来写入 JSON(或 CBOR)日志事件。 Uber 的 zap 库率先采用了这种方法。 Zerolog 通过更简单的 API 和更好的性能将这一概念提升到了一个新的水平。 为了保持代码库和 API 简单,zerolog...
more...