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
Patricia ArquetteOriginal
2024-11-23 06:34:10723Durchsuche

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!

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