Heim > Artikel > Backend-Entwicklung > Warum ist das Lesen von Zeilen aus stdin in C langsamer als in Python und wie kann es verbessert werden?
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:
Synchronisierung von cin mit stdio deaktivieren:
std::cin.sync_with_stdio(false);
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!