Go 为什么运行时互斥体/块评测不同于CPU/跟踪评测
Golang runtime profiler(用于cpu和跟踪)为我们提供了一个选项来决定分析的时间。然后在调用开始时设置评测的速率,并在调用结束时重置速率。事情是这样的Go 为什么运行时互斥体/块评测不同于CPU/跟踪评测,go,Go,Golang runtime profiler(用于cpu和跟踪)为我们提供了一个选项来决定分析的时间。然后在调用开始时设置评测的速率,并在调用结束时重置速率。事情是这样的 CPUProfiling() { StartCPUProfile() // internally calls SetCPUProfileRate(100) sleep(seconds) StopCPUProfile () // internally calls SetCPUProfileRate(0) }
CPUProfiling() {
StartCPUProfile() // internally calls SetCPUProfileRate(100)
sleep(seconds)
StopCPUProfile () // internally calls SetCPUProfileRate(0)
}
另一方面,对于互斥和块分析,它希望我们在应用程序启动时设置速率,在调用分析时,它只收集信息并返回
我的疑问是为什么互斥和块分析有不同的行为?在这里,我们还可以在通话开始时设置速率,在通话结束时设置重置速率,并留出一些睡眠时间 关于Go为什么以这种方式工作的问题应该针对维护人员。虽然提到“CPU配置文件…有一个特殊的API,StartCPUProfile和stopcpurpfile函数,因为它在配置文件期间将输出流式传输给写入程序。”但表面上的答案是“因为实现不同”。至于为什么它们不同,在Go邮件列表中问这个问题可能比问这个问题更好。你也可以根据需要调用
SetBlockProfileRate
,就像setCPupFileRate
一样。仅仅因为在处理程序中为您设置了最常见的默认用法,并不意味着您不能编写自己的。