Heim >Backend-Entwicklung >Python-Tutorial >Warum ist das Lesen von C-Standardeingaben langsamer als das von Python und wie kann es verbessert werden?

Warum ist das Lesen von C-Standardeingaben langsamer als das von Python und wie kann es verbessert werden?

DDD
DDDOriginal
2024-11-23 07:23:18944Durchsuche

Why is C   Standard Input Reading Slower Than Python's, and How Can It Be Improved?

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

Entgegen den Erwartungen kann C-Code zum Lesen von Eingabezeilen aus der Standardeingabe sind deutlich langsamer als Python-Pendants. Diese Diskrepanz ergibt sich aus den Standardeinstellungen in C.

Standardeingabe-Stream-Konfiguration

Standardmäßig ist der C-Eingabestream (cin) mit der Standard-Eingabe/Ausgabe (stdio) synchronisiert ). Diese Synchronisierung bedeutet, dass cin versucht, jegliche Eingabepufferung zu vermeiden, was dazu führt, dass Zeichen einzeln gelesen werden.

Warum Pufferung wichtig ist

Typischerweise puffern Eingabeströme Eingaben in größeren Mengen Chunks, wodurch die Anzahl der für den Datenabruf erforderlichen Systemaufrufe reduziert wird. Allerdings können separate Implementierungen und Puffer für FILE*-basierte stdio- und iostreams bei gemeinsamer Verwendung zu Problemen führen.

Um mögliche Konflikte zu vermeiden, werden Streams standardmäßig mit stdio synchronisiert. Cin liest Zeichen einzeln, was zu einem erheblichen Mehraufwand führt, insbesondere bei der Verarbeitung von Millionen von Zeilen.

Lösung

Um die Leistung zu verbessern, deaktivieren Sie die Stream-Synchronisierung mit sync_with_stdio(false). Methode am Anfang der Hauptfunktion:

std::ios_base::sync_with_stdio(false);

Mit dieser Änderung können C-Streams unabhängig voneinander puffern, was zu einer schnelleren Eingabe führt Handhabung.

Alternativer Ansatz: fgets

Eine andere Möglichkeit, die Eingabegeschwindigkeit zu verbessern, besteht darin, die fgets-Funktion anstelle von getline:

char buffer[1024];
while (fgets(buffer, sizeof(buffer), stdin)) {
    // Process the line
}
zu verwenden

Das obige ist der detaillierte Inhalt vonWarum ist das Lesen von C-Standardeingaben 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