suchen
HeimBackend-EntwicklungPython-TutorialWarum ist das Lesen der „stdin'-Zeile von C deutlich langsamer als das von Python und wie kann es verbessert werden?

Why Is C  's `stdin` Line Reading Significantly Slower Than Python's, and How Can It Be Improved?

Warum ist das Lesen von Zeilen aus stdin in C deutlich langsamer als in Python?

In diesem Artikel wollen wir untersuchen, warum das Lesen von Zeilen mit String-Daten aus der Standardeingabe (stdin ) mit C ist im Allgemeinen viel langsamer als sein Python-Gegenstück. Wir beginnen mit der Untersuchung des bereitgestellten Codes und identifizieren mögliche Problembereiche.

Der C-Code

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++;
}

Dieser Code verwendet getline(), um Textzeilen zu lesen stdin und zählt die Anzahl der Zeilen in einer Datei. Es liest jedoch jedes Zeichen der Datei einzeln innerhalb einer inneren Schleife. Dieser Ansatz ist ineffizient und führt zu übermäßigen Systemaufrufen, was zu einer langsamen Ausführung führt.

Standardeinstellungen von C-Streams

Im Gegensatz zu Python verfügen C-Streams über Standardeinstellungen, die die Synchronisierung mit dem C-Stil-Standard priorisieren Eingabe- und Ausgabefunktionen. Durch diese Synchronisierung wird sichergestellt, dass sowohl C- als auch C-Streams konsistent auf Eingabe- und Ausgaberessourcen zugreifen. Diese Synchronisierung verhindert jedoch auch, dass C-Streams effizientere Puffermechanismen verwenden.

cin wird mit stdio synchronisiert, wodurch jegliche Eingabepufferung vermieden wird. Infolgedessen liest cin jeweils nur ein Zeichen, was den Vorgang zeitaufwändiger macht.

Leistungsverbesserungen

Um die Leistung des C-Codes zu verbessern, Wir können die Synchronisierung zwischen cin und stdio deaktivieren. Durch das Hinzufügen der Anweisung cin.sync_with_stdio(false) am Anfang des Programms können wir C-Streams ermöglichen, ihre E/A unabhängig zu puffern, was zu erheblichen Geschwindigkeitssteigerungen führt.

Alternative: Verwendung von fgets

Ein weiterer effektiver Ansatz zur Leistungssteigerung ist die Verwendung von fgets() anstelle von getline(). fgets ist eine C-Funktion, die eine bestimmte Anzahl von Zeichen aus stdin in ein Zeichenarray liest und so eine bessere Kontrolle über den Pufferungsprozess bietet.

Benchmark-Ergebnisse

Zur Demonstration der Aufgrund des Leistungsunterschieds wurde zum Benchmarking eine Datei mit 100 Millionen Zeilen verwendet. Die Ergebnisse unter Verwendung des ursprünglichen (synchronisierten) C-Codes, C mit deaktivierter Synchronisierung und Python waren wie folgt:

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

Das Deaktivieren der Synchronisierung in C führte zu einer deutlichen Verbesserung, während die Verwendung von fgets eine noch bessere Leistung bot. Es ist wichtig zu beachten, dass die Verwendung von wc kein fairer Vergleich ist, da es speziell zum Zählen von Zeilen entwickelt wurde.

Schlussfolgerung

Durch Verständnis der Standardeinstellungen von C-Streams und Implementierung Durch entsprechende Optimierungen, wie das Deaktivieren der Stream-Synchronisierung oder die Verwendung von fgets, kann die Leistung von C-Code zum Lesen von Zeilen aus stdin erheblich verbessert werden, Damit ist es seinem Python-Gegenstück ebenbürtig oder sogar schneller.

Das obige ist der detaillierte Inhalt vonWarum ist das Lesen der „stdin'-Zeile von C deutlich langsamer als das von 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
Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal?Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal?Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Mar 10, 2025 pm 06:54 PM

In diesem Artikel wird erklärt, wie man schöne Suppe, eine Python -Bibliothek, verwendet, um HTML zu analysieren. Es beschreibt gemeinsame Methoden wie find (), find_all (), select () und get_text () für die Datenextraktion, die Behandlung verschiedener HTML -Strukturen und -Anternativen (SEL)

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Mar 10, 2025 pm 06:52 PM

Dieser Artikel vergleicht TensorFlow und Pytorch für Deep Learning. Es beschreibt die beteiligten Schritte: Datenvorbereitung, Modellbildung, Schulung, Bewertung und Bereitstellung. Wichtige Unterschiede zwischen den Frameworks, insbesondere bezüglich des rechnerischen Graps

Mathematische Module in Python: StatistikMathematische Module in Python: StatistikMar 09, 2025 am 11:40 AM

Das Statistikmodul von Python bietet leistungsstarke Datenstatistikanalysefunktionen, mit denen wir die allgemeinen Merkmale von Daten wie Biostatistik und Geschäftsanalyse schnell verstehen können. Anstatt Datenpunkte nacheinander zu betrachten, schauen Sie sich nur Statistiken wie Mittelwert oder Varianz an, um Trends und Merkmale in den ursprünglichen Daten zu ermitteln, die möglicherweise ignoriert werden, und vergleichen Sie große Datensätze einfacher und effektiv. In diesem Tutorial wird erläutert, wie der Mittelwert berechnet und den Grad der Dispersion des Datensatzes gemessen wird. Sofern nicht anders angegeben, unterstützen alle Funktionen in diesem Modul die Berechnung der Mittelwert () -Funktion, anstatt einfach den Durchschnitt zu summieren. Es können auch schwimmende Punktzahlen verwendet werden. zufällig importieren Statistiken importieren Aus Fracti

Was sind einige beliebte Python -Bibliotheken und ihre Verwendung?Was sind einige beliebte Python -Bibliotheken und ihre Verwendung?Mar 21, 2025 pm 06:46 PM

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben

Wie erstelle ich Befehlszeilenschnittstellen (CLIS) mit Python?Wie erstelle ich Befehlszeilenschnittstellen (CLIS) mit Python?Mar 10, 2025 pm 06:48 PM

Dieser Artikel führt die Python-Entwickler in den Bauen von CLIS-Zeilen-Schnittstellen (CLIS). Es werden mit Bibliotheken wie Typer, Click und ArgParse beschrieben, die Eingabe-/Ausgabemedelung betonen und benutzerfreundliche Designmuster für eine verbesserte CLI-Usabilität fördern.

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren?Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren?Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Erklären Sie den Zweck virtueller Umgebungen in Python.Erklären Sie den Zweck virtueller Umgebungen in Python.Mar 19, 2025 pm 02:27 PM

Der Artikel erörtert die Rolle virtueller Umgebungen in Python und konzentriert sich auf die Verwaltung von Projektabhängigkeiten und die Vermeidung von Konflikten. Es beschreibt ihre Erstellung, Aktivierung und Vorteile bei der Verbesserung des Projektmanagements und zur Verringerung der Abhängigkeitsprobleme.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.