首頁 > 後端開發 > Golang > go - 使用 cgo 時,`__GI___pthread_mutex_unlock` 佔用大部分執行時間

go - 使用 cgo 時,`__GI___pthread_mutex_unlock` 佔用大部分執行時間

WBOY
發布: 2024-02-10 09:45:08
轉載
486 人瀏覽過

go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间

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

# 65bcae965051

callback.go

# 65bcae965088

運行環境:

lscpu

# 65bcae965093

go語言版本

65bcae9650aa

這是 pprof 結果:

編輯:新增運行環境

解決方法

雖然我無法用上面的程式重現它:

65bceaa20ecf

但是有一個 對於每個回呼都有全域互斥體,因此如果您進行並行回調,則會降低效能。

以上是go - 使用 cgo 時,`__GI___pthread_mutex_unlock` 佔用大部分執行時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板