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