上一页 1 2 3 4 5 6 ··· 13 下一页
摘要: GC 触发时机与调优 1. 核心概念与工作原理 理解了"三色标记"和"写屏障"两个算法支柱之后,自然会追问一个工程问题:GC 到底什么时候会被触发?什么时候该让它多跑、什么时候该让它少跑? Go 的 GC 触发模型从 1.18 起引入了 GC Pacer(GC 调步器),目标不再是"堆翻倍才 GC" 阅读全文
posted @ 2026-09-24 10:43 FfHUCisI 阅读(15) 评论(0) 推荐(0)
摘要: 写屏障机制原理 1. 核心概念与工作原理 并发 GC 最大的难题不是"如何快",而是"如何对"。当 GC 扫描与用户 goroutine 同时运行时,用户 goroutine 改写指针的瞬间可能让 GC 漏标存活对象。这就需要一种机制——每当用户程序执行指针赋值时,额外做一点工作来通知 GC:"嘿, 阅读全文
posted @ 2026-09-24 10:41 FfHUCisI 阅读(5) 评论(0) 推荐(0)
摘要: 三色标记并发 GC 原理 1. 核心概念与工作原理 垃圾回收(Garbage Collection, GC)是 Go 语言运行时最核心的基础设施之一。它要解决的根本问题是:当程序运行时如何自动判断"哪些内存对象不再被使用"并安全释放。 手工管理(C 语言的 malloc/free)容易出现内存泄漏和 阅读全文
posted @ 2026-09-22 09:30 FfHUCisI 阅读(7) 评论(0) 推荐(0)
摘要: 栈空间管理与逃逸分析 1. 核心概念与工作原理 每个 goroutine 启动时都有一段专属栈——默认 2 KiB(Go 1.4 之后),比传统线程的 1 MiB 栈小两个数量级。这意味着可以并发运行数十万 goroutine 而不爆内存。但栈这么小,必然要解决两个问题: 栈不够用怎么办? → 连续 阅读全文
posted @ 2026-09-22 09:28 FfHUCisI 阅读(9) 评论(0) 推荐(0)
摘要: 抢占式调度实现细节 Go 1.13 及更早版本是"绅士调度"——goroutine 只有在函数调用、channel 操作或锁获取等时机才会主动检查是否需要让出 CPU。如果一个 goroutine 陷入了纯死循环,它可能永远霸占线程。Go 1.14 是一个分水岭,异步抢占的引入让 Go 调度器真正具 阅读全文
posted @ 2026-09-21 09:22 FfHUCisI 阅读(13) 评论(0) 推荐(0)
摘要: 系统调用与 M/P 解绑 当一个 goroutine 执行 read()、write() 或 accept() 等阻塞式系统调用时,线程(M)会从用户态陷入内核态。如果这时 M 仍然霸占着 Processor(P),那么 P 上的其他 goroutine 就会集体"干等"——这是对 CPU 资源的极 阅读全文
posted @ 2026-09-21 09:19 FfHUCisI 阅读(9) 评论(0) 推荐(0)
摘要: Work Stealing 工作窃取算法 在 Go 的 GMP 调度模型中,Work Stealing 是维系多核负载均衡的核心机制。当一个 Processor(P)的本地运行队列(LRQ)耗尽时,它不会闲着,而是主动去"偷"其他 P 的任务——这种自底向上的负载均衡策略,让 Go 的调度器在绝大多 阅读全文
posted @ 2026-09-21 09:18 FfHUCisI 阅读(11) 评论(0) 推荐(0)
摘要: Go 内存分配器概览:从 TCMalloc 到三级缓存架构 引言 内存分配是编程语言运行时最核心的基础设施之一。Go 的内存分配器继承自 Google 的 TCMalloc(Thread-Caching Malloc),采用三级缓存架构来平衡分配速度与内存碎片。理解这套机制,对排查内存泄漏、优化高频 阅读全文
posted @ 2026-09-09 09:28 FfHUCisI 阅读(12) 评论(0) 推荐(0)
摘要: Channel 底层:hchan、环形队列与等待队列的精准握手 Channel 是 Go 并发设计的灵魂。表面看它是 chan T,背后却是 runtime.hchan 结构体,配合环形缓冲区、两把等待队列和一把锁,实现了 CSP 模型中“通过通信共享内存”的语义。 一、hchan 结构体 Go 源 阅读全文
posted @ 2026-09-09 09:27 FfHUCisI 阅读(11) 评论(0) 推荐(0)
摘要: 调度循环:Go runtime 如何永不停歇地找人干活 GMP 把 goroutine、OS 线程、逻辑处理器这三层结构搭好,只是搭了个舞台。真正让这台戏能一直唱下去的,是 runtime.schedule() 为核心的调度循环。它就像一个永不下班的工头:每次线程 M 醒来,都要问自己三个问题——谁 阅读全文
posted @ 2026-09-08 17:54 FfHUCisI 阅读(25) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 13 下一页