Heim >Backend-Entwicklung >C++ >Warum ist „cin' von C deutlich langsamer als die Eingabe von Python und wie kann es verbessert werden?
Warum das Lesen von Zeilen aus stdin in C viel langsamer ist als in Python
Beim Vergleich der Eingabelesegeschwindigkeiten in Python und C wurde festgestellt, dass Der C-Code war um eine Größenordnung langsamer.
cins Mangel an Pufferung
Diese Diskrepanz ergibt sich aus einem grundlegenden Unterschied im Standardverhalten. cin in C ist standardmäßig mit der Standard-Eingabe/Ausgabe (stdio) synchronisiert, wodurch auf die Eingabepufferung verzichtet wird, was dazu führt, dass Zeichen einzeln gelesen werden, ein teurer Prozess in Bezug auf Systemaufrufe.
Lösung: Synchronisierung deaktivieren
Um die Leistung zu verbessern, kann die Synchronisierung von cin mit stdio deaktiviert werden, indem die folgende Zeile am Anfang hinzugefügt wird Programm:
std::ios_base::sync_with_stdio(false);
Dadurch können C-Streams I/O unabhängig puffern, was die Lesegeschwindigkeit deutlich erhöht.
Strohumfrage zur Veranschaulichung des Unterschieds:
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 (unfair comparison) | 54,644,808 |
Diese Tabelle zeigt den großen Unterschied in der Lesegeschwindigkeit, wenn die Synchronisierung von cin deaktiviert ist.
Das obige ist der detaillierte Inhalt vonWarum ist „cin' von C deutlich langsamer als die Eingabe von Python und wie kann es verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!