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` 佔用大部分執行時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!