Heim > Backend-Entwicklung > Python-Tutorial > Warum ist „cin' von C beim Lesen von Zeilen aus der Standardeingabe erheblich langsamer als „input()' von Python, und wie kann die Leistung verbessert werden?

Warum ist „cin' von C beim Lesen von Zeilen aus der Standardeingabe erheblich langsamer als „input()' von Python, und wie kann die Leistung verbessert werden?

Patricia Arquette
Freigeben: 2024-11-23 06:34:10
Original
718 Leute haben es durchsucht

Why is C  's `cin` Significantly Slower Than Python's `input()` for Reading Lines from Standard Input, and How Can Performance Be Improved?

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

Problem:

Beim Vergleich von Python- und C-Code zum Lesen von String-Eingabezeilen aus stdin wird Python-Code deutlich schneller ausgeführt. Obwohl eine ordnungsgemäße C-Implementierung gewährleistet ist, übertrifft das Python-Äquivalent diese um eine Größenordnung.

Standardeinstellungen und Systemaufrufe:

In Python ist die Eingabepufferung standardmäßig aktiviert , was zu effizienten Lesevorgängen großer Blöcke und weniger Systemaufrufen führt. Im Gegensatz dazu werden C-Streams mit stdio synchronisiert, was cin dazu zwingt, die Eingabepufferung zu überspringen und Zeichen einzeln zu lesen. Diese Wahl, die Konflikte mit stdio-Funktionen verhindern soll, führt unbeabsichtigt zu einem erheblichen Overhead.

Leistungsoptimierung:

Um die C-Leistung zu verbessern, fügen Sie die Anweisung cin.sync_with_stdio(false) ein ) am Anfang von main. Dadurch wird die Stream-Synchronisierung deaktiviert und eine unabhängige Pufferung ermöglicht, was die Eingabelesegeschwindigkeit erheblich erhöht.

Alternative Optionen:

Eine weitere leistungsstarke Alternative zu cin ist fgets, das stdio-Funktionen verwendet zum direkten Lesen von Eingaben.

Vergleich Ergebnisse:

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

Das obige ist der detaillierte Inhalt vonWarum ist „cin' von C beim Lesen von Zeilen aus der Standardeingabe erheblich langsamer als „input()' von Python, und wie kann die Leistung verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage