首页 > 文章列表 > 使用 cgo 时,`__GI___pthread_mutex_unlock` 太耗时

使用 cgo 时,`__GI___pthread_mutex_unlock` 太耗时

486 2024-02-23
问题内容

我正在使用 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

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