Heim >Backend-Entwicklung >C++ >Warum ist „cin' von C beim Lesen von Zeilen aus stdin deutlich langsamer als Python?

Warum ist „cin' von C beim Lesen von Zeilen aus stdin deutlich langsamer als Python?

DDD
DDDOriginal
2024-12-29 11:53:10780Durchsuche

Why is C  's `cin` Significantly Slower Than Python for Reading Lines from stdin?

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

Hintergrund:

Das Lesen von String-Eingabezeilen aus stdin mit C kann deutlich langsamer sein als mit dem Python-Äquivalent. Diese Diskrepanz entsteht durch Standardeinstellungen in C, die mehr Systemaufrufe erfordern.

Standardverhalten von Eingabestreams:

Standardmäßig wird der C-Eingabestream cin mit synchronisiert die Standard-C-I/O-Bibliothek (stdio). Durch diese Synchronisierung wird sichergestellt, dass die Eingabe nicht zwischengespeichert und zeichenweise gelesen wird. Während dieses Verhalten Konflikte zwischen dem Cin-Stream und den stdio-Funktionen verhindert, führt es auch zu einer Leistungseinbuße.

Verwendung von Systemaufrufen:

Wenn cin mit stdio synchronisiert wird, Jedes gelesene Zeichen löst einen Systemaufruf aus, eine kostspielige Operation. Dieser Overhead verlangsamt den Eingabevorgang erheblich, insbesondere beim Lesen großer Datenmengen.

Lösung:

Um die Leistung des Zeilenlesens in C zu verbessern, kann man es deaktivieren die Synchronisation zwischen cin und stdio. Dies kann durch Aufrufen der Methode sync_with_stdio(false) erreicht werden.

Alternativ wird durch die Verwendung der fgets-Funktion anstelle von getline auch der Synchronisierungsaufwand umgangen.

Leistungsvergleich:

Hier ist ein Leistungsvergleich zwischen der ursprünglichen (synchronisierten) C-Implementierung und verschiedenen Ansätze:

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

Fazit:

Das Deaktivieren der Synchronisierung zwischen cin und stdio oder die Verwendung von fgets kann die Leistung des Zeilenlesens in C erheblich verbessern und es damit vergleichbar machen Pythons Effizienz.

Das obige ist der detaillierte Inhalt vonWarum ist „cin' von C beim Lesen von Zeilen aus stdin deutlich langsamer als Python?. 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