go - cgo を使用すると、`__GI___pthread_mutex_unlock` が実行時間のほとんどを消費します

WBOY
リリース: 2024-02-10 09:45:08
転載
463 人が閲覧しました

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

php エディター Zimo は、cgo を使用すると時々問題が発生することを発見しました。つまり、`__GI___pthread_mutex_unlock` が実行時間のほとんどを消費するということです。この問題はパフォーマンスの低下を引き起こし、プログラムの実行効率に影響を与える可能性があります。この問題を解決するには、__GI___pthread_mutex_unlock の機能と原理を深く理解し、対応する最適化方法を見つける必要があります。この記事では、読者がこの問題をよりよく理解し、解決できるように、この問題の詳細な分析を提供します。

質問内容

cgoを使用してgoからc関数を呼び出しています。 c 関数内には go 関数へのコールバックがあります。つまり、 go -> c -> go と呼びます。

pprof を実行した後、__gi___pthread_mutex_unlock が実行時間の半分を占めていることに気付きました。私の知る限り、cgo にはオーバーヘッド、特に c から go へのコールバックがあります。しかし不思議なことに、cgo は実行時間の半分をロックに費やします。私のコードに何か問題がありますか?

main.go

65bcae965051

callback.go

65bcae965088

実行環境:

lscpu

65bcae965093

Go言語バージョン

65bcae9650aa

これは pprof の結果です:

編集: 実行環境を追加

回避策

上記のプログラムでは再現できませんが:

65bceaa20ecf

ただし、コールバックごとに グローバル ミューテックス が存在するため、並列コールバックを実行するとパフォーマンスが低下します。

以上がgo - cgo を使用すると、`__GI___pthread_mutex_unlock` が実行時間のほとんどを消費しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!