Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist das Lesen von Zeilen aus stdin in C langsamer als in Python und wie kann es verbessert werden?

Warum ist das Lesen von Zeilen aus stdin in C langsamer als in Python und wie kann es verbessert werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-25 15:54:11140Durchsuche

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

Leistungseinbußen beim Lesen von Zeilen aus stdin in C im Vergleich zu Python

Man könnte überrascht sein zu entdecken, dass das Lesen von Textzeilen aus stdin in C ist deutlich langsamer als die entsprechende Operation in Python. Um diese Leistungsunterschiede zu beheben, untersuchen wir, warum sie auftreten, und stellen Lösungen zur Abschwächung bereit.

Standardeinstellungen in C

Standardmäßig ist der Cin-Stream von C mit der Standardeingabe und -ausgabe (stdio) synchronisiert, was zu einer deaktivierten Eingabepufferung führt. Dies bedeutet, dass cin jeweils ein Zeichen liest, was zu zahlreichen Systemaufrufen führt, was einen Leistungsengpass darstellt.

Pythons optimierte Eingabeverarbeitung

Im Gegensatz dazu Python Verwendet optimierte Eingabeverarbeitungsmechanismen, die Eingaben in Blöcken puffern, Systemaufrufe reduzieren und die Leistung verbessern.

Verbesserung des C-Lesens Leistung

Um die Leseleistung von C zu verbessern, können zwei Ansätze verfolgt werden:

  1. Synchronisierung von cin mit stdio deaktivieren:

    std::cin.sync_with_stdio(false);
  2. Verwenden Sie fgets Stattdessen:

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), stdin)) {
        // process line
    }

Vergleich der Ansätze

Die folgende Tabelle vergleicht die Leistung verschiedener Implementierungen:

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

Es ist offensichtlich, dass die Deaktivierung der Cin-Synchronisierung oder die Verwendung von fgets die Leistung von C erheblich verbessert und es mit Python vergleichbar macht in Bezug auf das Lesen von Zeilen aus stdin.

Das obige ist der detaillierte Inhalt vonWarum ist das Lesen von Zeilen aus stdin in C langsamer als in Python und wie kann es verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn