php小編子墨發(fā)現(xiàn),在使用cgo時,有時會遇到一個問題,即`__GI___pthread_mutex_unlock`占用了大部分的執(zhí)行時間。這個問題可能會導致性能下降,影響程序的運行效率。為了解決這個問題,我們需要深入了解`__GI___pthread_mutex_unlock`的作用和原理,并找到相應的優(yōu)化方法。本文將對這個問題進行詳細解析,幫助讀者更好地理解并解決這個問題。
問題內容
我正在使用 cgo 從 go 調用 c 函數(shù)。 c 函數(shù)內部有一個 go 函數(shù)的回調。換句話說,我調用 go -> c -> go。
運行 pprof 后,我注意到 __gi___pthread_mutex_unlock
占用了一半的執(zhí)行時間。 afaik,cgo 有開銷,尤其是從 c 回調到 go。但奇怪的是,cgo 花費了一半的執(zhí)行時間來進行一些鎖定。我的代碼有問題嗎?
main.go
65bcae965051
callback.go
65bcae965088
運行環(huán)境:
lscpu
65bcae965093
go語言版本
65bcae9650aa
這是 pprof 結果:
編輯:添加運行環(huán)境
解決方法
雖然我無法用上面的程序重現(xiàn)它:
65bceaa20ecf
但是有一個 對于每個回調都有全局互斥體,因此如果您進行并行回調,則會降低性能。