Go语言如何实现stop the world?

本文探讨了Go语言中垃圾回收器的“停止世界”(Stop the World, STW)阶段,解释了STW如何暂停所有goroutine以进行内存扫描。内容包括STW的抢占过程、系统调用的影响、可能出现的延迟问题及其解决方案。通过阅读,读者可以了解STW的工作机制以及其对程序性能的影响。" 130240909,7444302,使用Xilinx AXI IIC扩展多路I2C总线,"['petalinux', 'axi-iic', 'i2c扩展']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文基于 Go 1.13。

在某些垃圾回收器算法中,“停止世界”(Stop the World: STW,下同)是跟踪内存使用最重要的阶段,它会停止程序的执行,以扫描内存使用,并添加写障碍。让我们回顾一下它在内部如何工作,以及它可能面临的潜在问题。

停止世界(Stop the world)

停止程序意味着停止所有正在运行的 goroutine。下面是一个执行 STW 的简单程序:

func main() {
   runtime.GC()
}

运行垃圾回收器,将触发 STW 两个阶段。

有关垃圾回收器周期的更多信息,建议阅读我的另外一篇文章 “Go:垃圾收集器如何标记内存? ① ”

第一步:抢占所有正在运行的 goroutine:

goroutine 抢占

一旦 goroutine 被抢占,它们将在安全点停止。同时,P 处理器将(正在运行的代码或在空闲列表)被标记为已停止ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值