ホームページ >バックエンド開発 >Python チュートリアル >標準入力からの行の読み取りにおいて、C の `cin` は Python の `input()` よりも大幅に遅いのはなぜですか?また、パフォーマンスを改善するにはどうすればよいですか?

標準入力からの行の読み取りにおいて、C の `cin` は Python の `input()` よりも大幅に遅いのはなぜですか?また、パフォーマンスを改善するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-23 06:34:10655ブラウズ

Why is C  's `cin` Significantly Slower Than Python's `input()` for Reading Lines from Standard Input, and How Can Performance Be Improved?

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

問題:

標準入力から入力された文字列の行を読み取るために Python と C コードを比較すると、Python コードの実行速度が大幅に向上します もっと早く。適切な C 実装が保証されているにもかかわらず、Python の同等のパフォーマンスはそれを一桁上回っています。

デフォルト設定とシステム コール:

Python では、入力バッファリングがデフォルトで有効になっています。これにより、大きなチャンクの読み取りが効率的に行われ、システム コールが減少します。対照的に、C ストリームは stdio と同期しているため、cin は入力バッファリングをスキップして文字を個別に読み取る必要があります。この選択は、stdio 関数との競合を防ぐことを目的としており、誤って重大なオーバーヘッドを引き起こします。

パフォーマンスの最適化:

C のパフォーマンスを向上させるには、ステートメント cin.sync_with_stdio(false) を含めます。 ) メインの先頭にあります。これにより、ストリーム同期が無効になり、独立したバッファリングが可能になり、入力読み取り速度が大幅に向上します。

代替オプション:

cin のもう 1 つの高パフォーマンスな代替手段は、stdio 関数を使用する fgets です。直接入力読み取りの場合。

比較結果:

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 fair comparison) 54,644,808

以上が標準入力からの行の読み取りにおいて、C の `cin` は Python の `input()` よりも大幅に遅いのはなぜですか?また、パフォーマンスを改善するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。