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
callback.go
実行環境:
lscpu
Go言語バージョン
65bcae9650aaこれは pprof の結果です:
編集: 実行環境を追加
上記のプログラムでは再現できませんが:
65bceaa20ecfただし、コールバックごとに グローバル ミューテックス が存在するため、並列コールバックを実行するとパフォーマンスが低下します。
以上がgo - cgo を使用すると、`__GI___pthread_mutex_unlock` が実行時間のほとんどを消費しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。