ホームページ > バックエンド開発 > Python チュートリアル > C では stdin からの行の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?

C では stdin からの行の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?

Susan Sarandon
リリース: 2024-11-25 15:54:11
オリジナル
167 人が閲覧しました

Why is Reading Lines from stdin Slower in C   than in Python, and How Can It Be Improved?

Python と比較した C での stdin からの行の読み取りのパフォーマンス ペナルティ

C で stdin からテキストの行を読み取ると、 C は、Python での同等の操作よりも大幅に遅くなります。このパフォーマンスの格差に対処するために、その原因を詳しく調べて、それを軽減するための解決策を提供しましょう。

C のデフォルト設定

デフォルトでは、 C の cin ストリームは次のとおりです。標準入出力 (stdio) と同期されるため、入力バッファリングが無効になります。これは、cin が一度に 1 文字の読み取りを実行するため、多数のシステム コールが発生し、パフォーマンスのボトルネックになることを意味します。

Python の最適化された入力処理

対照的に、Python は入力をチャンクにバッファリングする最適化された入力処理メカニズムを採用し、システムコールを削減し、改善します

C 読み取りパフォーマンスの向上

C の読み取りパフォーマンスを向上させるには、次の 2 つのアプローチを採用できます。

  1. cin の同期を無効にするstdio:

    std::cin.sync_with_stdio(false);
    ログイン後にコピー
  2. 代わりに fgets を使用します:

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), stdin)) {
        // process line
    }
    ログイン後にコピー

の比較アプローチ

次の表は、さまざまな実装のパフォーマンスを比較しています。

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

明らかなように、cin 同期を無効にするか fgets を使用すると、C のパフォーマンスが大幅に向上し、Python と同等になります。標準入力からの行の読み取りに関して。

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

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