1
另一个特别有用的信息是处于“可运行”状态的 goroutines 的数量(选定时间为 13 个):如果这个数字随着时间的推移变得很大,这可能表明我们需要更多的 CPU 来处理负载。
跟踪器是调试并发问题(例如争用和逻辑竞争)的强大工具。但它并不能解决所有问题:它不是追踪哪段代码花费最多 CPU 时间或分配的最佳工具。更go tool pprof适合这些用例。
当您想了解程序随时间的行为并了解每个 goroutine 在未运行时正在做什么时,该工具真的很出色。收集痕迹可能会产生一些开销,并且会生成大量要检查的数据。
https://blog.gopheracademy.com/advent-2017/go-execution-tracer/
https://www.cnblogs.com/sunsky303/p/11058808.html
亲和性
让之前的g继续得到运行机会后,还是之前的线程去执行它
只有一个队列无法保证 Goroutine 能够被分配到与原来相同的线程上。最先就绪的线程会获取一个等待状态的 Goroutine 并执行该 goroutine。因此,这涉及 Goroutine 从一个线程转移到另一个线程,而这在性能方面开销很大
https://mp.weixin.qq.com/s/XnqF5aZ_0F3-cZPUm9pM7w
任务窃取的验证
https://medium.com/a-journey-with-go/go-work-stealing-in-go-scheduler-d439231be64d
原文链接: https://dashen.tech/2010/03/18/Go底层碎语/
版权声明: 转载请注明出处.