go - 如何将 Go 的 GC CPU 使用率提高到 25% 以上?
问题描述
根据一些文章(like this和this),Go 的垃圾收集器最多只能占用 25% 的可用 CPU,而且看起来这个数字实际上是 golang 开发人员辛勤工作的结果——他们正在努力使这个数字相当小。
但是,因为在我的情况下,我想在特定时间(按runtime.GC()
)运行 GC,并且我还希望 GC 尽快完成,我想知道是否有可能让 Go 的 GC 使用 100% 的可用 CPU,以便 GC 更早完成。
这可能吗?
语境
我的代码具有确定的繁忙和空闲时间。由于繁忙的部分应该运行得非常快(如果触发 GC,它太慢了),我想在空闲时间内运行 GC,空闲时间也相对较短,因此 GC 也应该运行得快。我不会使用非 GC 语言,因为不需要硬实时,而且我也不太聪明,无法正确管理内存。
解决方案
我找到了。如果我设置GODEBUG=gcstoptheworld=1
or GODEBUG=gcstoptheworld=2
,那么手动 GC 会利用所有可用的 CPU,尽管这显然会禁用并发 GC。参考:https ://golang.org/pkg/runtime/
就我而言,这就足够了。但我实际上想知道在并发 GC 工作时如何利用更多 CPU。似乎简单地增加值 gcGoalUtilization
和gcBackgroundUtilization
从runtime/mgc.go
源头构建是行不通的。唔...
编辑
这无疑实现了更好的 CPU 利用率,但实际上我看不到明显的加速(根据go tool trace
)。也许我错过了一些东西。
推荐阅读
- rust - 发送到数组中的每个 futures::sync::mpsc::Sender
- python - 想要在 python 中执行分组,分组数据将进入行
- java - Maven - 我是否应该包含我导入的库包含的依赖项
- machine-learning - 如何使用机器学习算法设置多类?
- r - 指定固定效应两级变量 rma.mv
- unity3d - 如何在 Unity 5 中为结果设置动画?
- javascript - 默认情况下如何在 TinyMCE 中选择“对齐文本”切换按钮?
- flutter - FullscreenDialog 屏幕不覆盖底部导航栏
- javascript - 为 JSON-Data 和 JSONschema 动态构建显示
- c++ - 如何检查 C++20 支持?__cplusplus 对于 C++20 的值是多少?