首页  >  文章  >  后端开发  >  go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间

go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间

WBOY
WBOY转载
2024-02-10 09:45:08463浏览

go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间

php小编子墨发现,在使用cgo时,有时会遇到一个问题,即`__GI___pthread_mutex_unlock`占用了大部分的执行时间。这个问题可能会导致性能下降,影响程序的运行效率。为了解决这个问题,我们需要深入了解`__GI___pthread_mutex_unlock`的作用和原理,并找到相应的优化方法。本文将对这个问题进行详细解析,帮助读者更好地理解并解决这个问题。

问题内容

我正在使用 cgo 从 go 调用 c 函数。 c 函数内部有一个 go 函数的回调。换句话说,我调用 go -> c -> go。

运行 pprof 后,我注意到 __gi___pthread_mutex_unlock 占用了一半的执行时间。 afaik,cgo 有开销,尤其是从 c 回调到 go。但奇怪的是,cgo 花费了一半的执行时间来进行一些锁定。我的代码有问题吗?

main.go

65bcae965051

callback.go

65bcae965088

运行环境:

lscpu

65bcae965093

go语言版本

65bcae9650aa

这是 pprof 结果:

编辑:添加运行环境

解决方法

虽然我无法用上面的程序重现它:

65bceaa20ecf

但是有一个 对于每个回调都有全局互斥体,因此如果您进行并行回调,则会降低性能。

以上是go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除