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 サイトの他の関連記事を参照してください。

toAppendElementStoapyThonList、usetheappend()methodforsingleelements、extend()formultipleElements、andinsert()forspecificopsitions.1)useappend()foraddingoneElementatheend.2)useextend()toaddmultipleelementseffictience.3)

To CreateapythonList、usesquareBrackets []およびSeparateItemswithcommas.1)listsaredynamicandcanholdmixdatatypes.2)useappend()、remaid()、andslicingformanipulation.3)listcompreheNsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsientionforcreating.4)

金融、科学研究、医療、およびAIの分野では、数値データを効率的に保存および処理することが重要です。 1)財務では、メモリマッピングされたファイルとnumpyライブラリを使用すると、データ処理速度が大幅に向上する可能性があります。 2)科学研究の分野では、HDF5ファイルはデータストレージと取得用に最適化されています。 3)医療では、インデックス作成やパーティション化などのデータベース最適化テクノロジーがデータのパフォーマンスを向上させます。 4)AIでは、データシャーディングと分散トレーニングがモデルトレーニングを加速します。システムのパフォーマンスとスケーラビリティは、適切なツールとテクノロジーを選択し、ストレージと処理速度の間のトレードオフを検討することにより、大幅に改善できます。

pythonarraysarasarecreatedusingthearraymodule、notbuilt-inlikelists.1)importthearraymodule.2)specifytheTypecode、emg。、 'i'forintegers.3)Arraysofferbettermemoreefficiency forhomogeneousdatabutlasefutablethanlists。

Shebangラインに加えて、Pythonインタープリターを指定するには多くの方法があります。1。コマンドラインから直接Pythonコマンドを使用します。 2。バッチファイルまたはシェルスクリプトを使用します。 3. makeやcmakeなどのビルドツールを使用します。 4. Invokeなどのタスクランナーを使用します。各方法には利点と短所があり、プロジェクトのニーズに合った方法を選択することが重要です。

forhandlinglaredataSetsinpython、usenumpyArrays forbetterperformance.1)numpyarraysarememory-effictientandfasterfornumericaloperations.2)nusinnnnedarytypeconversions.3)レバレッジベクトル化は、測定済みのマネージメーシェイメージーウェイズデイタイです

inpython、listsusedynamicmemoryallocation with allocation、whilenumpyArraysalocatefixedmemory.1)listsallocatemorememorythanneededededinitivative.2)numpyArrayasallocateexactmemoryforements、rededicablebutlessflexibilityを提供します。

inpython、youcanspecthedatatypeyfelemeremodelernspant.1)usenpynernrump.1)usenpynerp.dloatp.ploatm64、フォーマーpreciscontrolatatypes。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

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