C では標準入力 (stdin) からの行の読み取りが Python よりも大幅に遅いのはなぜですか?
この記事では、標準入力 (stdin) から文字列データの行を読み取る理由を調査することを目的としています。 ) C を使用すると、一般に Python の対応物よりもはるかに遅くなります。まず、提供されたコードを調べて、潜在的な懸念領域を特定します。
C コード
string input_line; long line_count = 0; time_t start = time(NULL); int sec; int lps; while (cin) { getline(cin, input_line); if (!cin.eof()) line_count++; }
このコードは、getline() を使用してテキスト行を読み取ります。 stdin を取得し、ファイル内の行数をカウントします。ただし、内部ループ内でファイルの各文字を一度に 1 つずつ読み取ります。このアプローチは非効率的であり、過剰なシステム コールが発生し、実行速度が遅くなります。
C ストリームのデフォルト設定
Python とは異なり、C ストリームには C スタイルの標準との同期を優先するデフォルト設定があります。入出力機能。この同期により、C ストリームと C ストリームの両方が入力リソースと出力リソースに一貫してアクセスできるようになります。ただし、この同期により、C ストリームがより効率的なバッファリング メカニズムを使用することもできなくなります。
cin は stdio と同期されるため、入力バッファリングが回避されます。その結果、cin は一度に 1 文字だけを読み取るため、プロセスに時間がかかります。
パフォーマンスの向上
C コードのパフォーマンスを向上させるには、 cin と stdio 間の同期を無効にすることができます。プログラムの先頭にステートメント cin.sync_with_stdio(false) を追加すると、C ストリームが I/O を個別にバッファリングできるようになり、速度が大幅に向上します。
代替案: fgets
の使用 パフォーマンスを向上させるもう 1 つの効果的なアプローチは、代わりに fgets() を使用することです。 getline() の。 fgets は、指定された数の文字を標準入力から文字配列に読み取り、バッファリング プロセスをより詳細に制御できる C 関数です。
ベンチマーク結果
パフォーマンスの違いを考慮して、1 億行を含むファイルがベンチマークに使用されました。元の (同期された) C コード、同期が無効になった C、および Python を使用した結果は次のとおりです。
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 |
C で同期を無効にすると大幅な改善が得られ、fgets を使用するとさらに優れたパフォーマンスが得られました。 wc の使用は、行数をカウントするために特別に設計されているため、公平な比較ではないことに注意することが重要です。
結論
C ストリームのデフォルト設定を理解し、実装することでストリーム同期の無効化や fgets の使用などの適切な最適化、行を読み取るための C コードのパフォーマンスstdin は劇的に改善され、対応する Python と同等か、それよりも高速になります。
以上がC の `stdin` 行の読み取りが Python よりも大幅に遅いのはなぜですか?それを改善するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

Pythonオブジェクトのシリアル化と脱介入は、非自明のプログラムの重要な側面です。 Pythonファイルに何かを保存すると、構成ファイルを読み取る場合、またはHTTPリクエストに応答する場合、オブジェクトシリアル化と脱滑り化を行います。 ある意味では、シリアル化と脱派化は、世界で最も退屈なものです。これらすべての形式とプロトコルを気にするのは誰ですか? Pythonオブジェクトを維持またはストリーミングし、後で完全に取得したいと考えています。 これは、概念レベルで世界を見るのに最適な方法です。ただし、実用的なレベルでは、選択したシリアル化スキーム、形式、またはプロトコルは、プログラムの速度、セキュリティ、メンテナンスの自由、およびその他の側面を決定する場合があります。

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

このチュートリアルは、単純なツリーナビゲーションを超えたDOM操作に焦点を当てた、美しいスープの以前の紹介に基づいています。 HTML構造を変更するための効率的な検索方法と技術を探ります。 1つの一般的なDOM検索方法はExです

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

この記事では、コマンドラインインターフェイス(CLI)の構築に関するPython開発者をガイドします。 Typer、Click、Argparseなどのライブラリを使用して、入力/出力の処理を強調し、CLIの使いやすさを改善するためのユーザーフレンドリーな設計パターンを促進することを詳述しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック



