ホームページ > バックエンド開発 > C++ > C の標準入力の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?

C の標準入力の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?

Barbara Streisand
リリース: 2024-12-26 16:29:09
オリジナル
384 人が閲覧しました

Why is C   Standard Input Reading Slower Than Python's, and How Can It Be Improved?

C 標準入力の読み取りが Python の効率に及ばない理由

標準からの文字列入力行の読み取りにおける Python と C のパフォーマンスを比較しながら入力 (stdin) を実行すると、顕著な差異が現れました。C コードの実行が大幅に遅くなりました。これにより、このパフォーマンス ギャップの根本的な理由を調査することになりました。

この問題は、 C のデフォルト設定に起因しています。デフォルトでは、cin などの istream は stdio と同期するため、入力バッファリングが回避されます。パフォーマンスを最適化するために、std::ios_base::sync_with_stdio(false) ステートメントを使用してこの同期を無効にすることができます。この調整により、パフォーマンス上の主要な制約が緩和されます。

標準入力ストリームは、設計により Python と C で動作が異なります。 Python は通常バッファリングされますが、C はデフォルトでバッファリングされません。通常の状況では、バッファリングによりシステムコールが減少し、効率が向上します。ただし、C の FILE* ベースの stdio および iostream の個別の実装とバッファを一緒に使用すると、潜在的な問題が発生します。

バッファの不整合や予期しない結果を避けるために、C はデフォルトでストリームを stdio と同期します。これにより潜在的な問題は防止されますが、特に大量の入力を処理する場合にオーバーヘッドが発生します。

最大のパフォーマンスを達成するために、プログラマは sync_with_stdio メソッドを使用して同期を無効にすることができます。この最適化により、C 標準ストリームが独立してバッファリングできるようになり、特定のシナリオで速度が大幅に向上します。

パフォーマンス ベンチマーク

より包括的な比較については、さまざまなアプローチによるパフォーマンス ベンチマークを次に示します。 :

Implementation Lines per second
Python (default) 3,571,428
cin (default/naive) 819,672
cin (no sync) 12,500,000
fgets 14,285,714
wc 54,644,808 (Not a fair comparison)

明らかなように、同期を無効にして fgets の結果を使用すると、 C のパフォーマンスが大幅に向上しました。

以上がC の標準入力の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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