ホームページ > バックエンド開発 > C++ > C の `cin` は、標準入力からの行の読み取りが Python よりも大幅に遅いのはなぜですか?

C の `cin` は、標準入力からの行の読み取りが Python よりも大幅に遅いのはなぜですか?

DDD
リリース: 2024-12-29 11:53:10
オリジナル
772 人が閲覧しました

Why is C  's `cin` Significantly Slower Than Python for Reading Lines from stdin?

C では標準入力からの行の読み取りが Python よりも遅いのはなぜですか?

背景:

C を使用して標準入力から文字列入力の行を読み取ると、Python よりも大幅に遅くなる可能性があります 同等。この不一致は、より多くのシステム コールを必要とする C のデフォルト設定が原因で発生します。

入力ストリームのデフォルト動作:

デフォルトでは、C 入力ストリーム cin は、標準 C I/O ライブラリ (stdio)。この同期により、入力がバッファリングされず、一度に 1 文字ずつ読み取られることが保証されます。この動作により、cin ストリームと stdio 関数間の競合が防止されますが、パフォーマンス上のペナルティも発生します。

システム コールの使用:

cin が stdio と同期している場合、文字が読み取られるたびに、コストのかかる操作であるシステム コールがトリガーされます。このオーバーヘッドにより、特に大量のデータを読み取る場合、入力プロセスが大幅に遅くなります。

解決策:

C での行読み取りのパフォーマンスを向上させるには、 cin と stdio の間の同期。これは、sync_with_stdio(false) メソッドを呼び出すことで実現できます。

また、getline の代わりに fgets 関数を使用しても、同期オーバーヘッドを回避できます。

パフォーマンスの比較:

オリジナルとのパフォーマンス比較は次のとおりです。 (同期) 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 (not a fair comparison) 54,644,808

結論:

cin と stdio の間の同期を無効にするか、fget を使用すると、ライン読み取りのパフォーマンスが大幅に向上します。 C では、Python の効率と同等になります。

以上がC の `cin` は、標準入力からの行の読み取りが Python よりも大幅に遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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