标签: runtime
与该标签相关的所有文章 "runtime".
-
Go 运行时(三):netpoller 如何用 epoll 与 gopark 跑异步 I/O
Go 运行时在创建网络 socket 时将其设为非阻塞,当 Read/Write 返回 EAGAIN 时,通过 gopark 挂起 goroutine(不占 OS 线程),将 fd 注册到 epoll/kqueue(边缘触发),就绪后通过调度器的 findRunnable 或 sysmon 唤醒 goroutine 重试——用户写的是同步代码,运行时跑的是异步 I/O。
-
Go 运行时(二):并发三色标记清除收集器
Go 使用并发、非移动、三色标记清除垃圾收集器。设计哲学是用内存换低延迟(STW < 1ms),只暴露两个调参旋钮(GOGC + GOMEMLIMIT)。Go 1.26 起默认启用 Green Tea GC,marking 阶段性能提升 10-40%。
-
Go 运行时(一):GMP 调度模型
Go 运行时通过 G(goroutine)、M(OS thread)、P(logical processor)三级抽象实现 M:N 线程调度。P 的引入(Go 1.1)解决了全局锁竞争,work-stealing 保证负载均衡,异步抢占(Go 1.14+,SIGURG 信号)消除了 CPU 密集型 goroutine 的饥饿问题。Go 1.25 起 GOMAXPROCS 自动感知容器 cgroup CPU 限制。
-
Go 并发(一):Channel 内部机制与使用模式
Channel 是 Go CSP 并发模型的核心原语,底层由 hchan 结构体实现(环形缓冲区 + 互斥锁 + 两条等待队列)。发送/接收的关键优化是直接传输——当对端已在等待时,数据绕过缓冲区直接拷贝到对方栈上。select 通过随机轮询序(防饥饿)+ 地址排序加锁(防死锁)实现多路复用。理解这些内部机制对写出正确、高效的并发代码至关重要。