ホームページ > バックエンド開発 > Golang > 私の Cgo コードが予想される Go コードよりも遅いのはなぜですか?

私の Cgo コードが予想される Go コードよりも遅いのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-02 09:44:10
オリジナル
491 人が閲覧しました

Why is my Cgo code slower than expected Go code?

なぜ cgo は遅いのですか?

テスト コードでは、C 関数と Go 関数がそれぞれ 1 億回実行される実行時間を比較しています。 C 関数は Golang 関数よりも時間がかかり、テスト コードに何か問題があるのではないかと心配しています。

CGo 経由で C/C コードを呼び出すオーバーヘッドが高いため、CGo 呼び出しは最小限に抑えるのが最適です。この例では、CGo 関数をループ内で繰り返し呼び出すよりも、C ループを作成する方が効率的である可能性があります。

Go ランタイムのスレッド設定は、いくつかの方法で C コードの期待を裏切る可能性があります。

  1. 比較的小さい goroutine スタック
  2. libpthread のスレッド ローカル ストレージとの不適切な相互作用実装
  3. Go ランタイムの UNIX シグナル ハンドラーとの干渉
  4. C コードがスレッドを独占すると他のゴルーチンに悪影響を及ぼす可能性があります

したがって、CGo は安全な方法で実行します。従来のスタックを使用した別のスレッドの C コード。

次のような言語とは異なります。 Python では、プログラムを高速化するために C でコードのホットスポットを書き換えるのが一般的でしたが、Go では C と Go コード間のパフォーマンスの差ははるかに小さくなっています。既存のライブラリとのインターフェース用に CGo を予約し、場合によっては Go から必要な呼び出しの数を減らすために小さな C ラッパー関数を使用することを検討してください。

以上が私の Cgo コードが予想される Go コードよりも遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート