関数パラメータとグローバル変数のパフォーマンスへの影響
Go プログラミングの領域では、関数パラメータを優先すべきかという疑問がよく起こります。最適なパフォーマンスを得るにはグローバル変数を使用しますか?
関数 checkFiles を検討してください。
excludedPatterns は関数の実行を通じて一定のままであるため、パラメータの繰り返しの受け渡しを排除してパフォーマンスを最適化するために、これをグローバル変数にすることを提案する人もいます。
ただし、Go ではスライスパラメータが効率的に処理されるため、この最適化は不要です。スライスは、メタデータ (長さと容量) を含み、基礎となるデータ構造を指す軽量の構造です。スライスが関数パラメータとして渡されると、バッキング配列全体ではなく、メタデータのみがコピーされます。これは「コピーオンライト」セマンティクスとして知られています。したがって、関数パラメーターを介して ExcludedPatterns にアクセスすることは、グローバル変数としてアクセスする場合と同様に効率的です。
さらに、パラメーターを値で渡すと、多くの場合、コンパイラーによるキャッシュなどの最適化が行われる可能性があります。一方、グローバル変数はより複雑な処理を必要とするため、最適化が妨げられる可能性があります。
ベンチマークは、スライスを関数パラメーターとして渡す場合とグローバル スライスにアクセスする場合に大きなパフォーマンスの違いがないことを示しています。
ベンチマークの結果は、両方のアプローチがほぼ同じ速度で実行されることを示しています:
結論として、問題のユースケースでは、コードを簡素化し、可読性を高め、Go のグローバル変数と同等のパフォーマンスを提供するため、excludedPatterns を関数パラメーターとして渡すことをお勧めします。
以上がGo のパフォーマンス: 関数パラメーターとグローバル変数: 実際の速度に違いはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。