卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章35146本站已运行394

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

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

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

卓越飞翔博客
上一篇: JSON 数字在解组到接口后被截断
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏