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
callback.go
运行环境:
lscpu
go语言版本
65bcae9650aa这是 pprof 结果:
编辑:添加运行环境
解决方法
虽然我无法用上面的程序重现它:
65bceaa20ecf但是有一个 对于每个回调都有全局互斥体,因此如果您进行并行回调,则会降低性能。
以上就是go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间的详细内容,更多请关注编程网其它相关文章!