我在 go 中编写了一个多 goroutine 基准测试。我使用 go tool pprof 来分析如何优化我的代码。当我使用 top10 显示一些信息时,我得到了以下输出:
Showing top 10 nodes out of 167
flat flat% sum% cum cum%
4700ms 17.86% 17.86% 4700ms 17.86% runtime.pthread_cond_signal
1790ms 6.80% 24.66% 1790ms 6.80% cmpbody
1470ms 5.59% 30.24% 1620ms 6.16% syscall.syscall
1360ms 5.17% 35.41% 3280ms 12.46% runtime.scanobject
1170ms 4.45% 39.86% 1410ms 5.36% runtime.findObject
960ms 3.65% 43.50% 960ms 3.65% runtime.pthread_cond_wait
950ms 3.61% 47.11% 950ms 3.61% runtime.memmove
650ms 2.47% 49.58% 650ms 2.47% runtime.usleep
650ms 2.47% 52.05% 2490ms 9.46% talent.TopN.func1
630ms 2.39% 54.45% 2890ms 10.98% runtime.mallocgc
很明显,runtime.pthread_cond_signal 在我的代码中花费了很多时间。我尝试用谷歌搜索一些关于 runtime.pthread_cond_signal 的可用信息。但未能得到他们。尽管有些帖子提到了它,但它们只是提供了一些提示,让我仍然对此感到困惑。
我想这种情况是相对于 Go 中频道的使用情况,但我不确定我的意见,我也不知道一些细节。
我想知道的是:
什么会导致 go 通常在 runtime.pthread_cond_signal 上花费这么多时间?
正常情况下,遇到这种情况如何优化你的go代码?</p>
随时提供任何信息和建议。我很高兴收到您的任何帮助。