Maison >développement back-end >Tutoriel Python >Pourquoi la lecture des lignes depuis stdin est-elle plus lente en C qu'en Python, et comment peut-elle être améliorée ?
Pénalité de performance lors de la lecture de lignes depuis stdin en C par rapport à Python
On pourrait être surpris de découvrir que la lecture de lignes de texte depuis stdin en C est nettement plus lent que l’opération équivalente en Python. Pour remédier à cette disparité de performances, examinons pourquoi elle se produit et proposons des solutions pour l'atténuer.
Paramètres par défaut en C
Par défaut, le flux cin de C est synchronisé avec l'entrée et la sortie standard (stdio), ce qui entraîne une mise en mémoire tampon d'entrée désactivée. Cela signifie que cin effectue la lecture d'un caractère à la fois, ce qui entraîne de nombreux appels système, ce qui constitue un goulot d'étranglement en termes de performances.
Gestion optimisée des entrées de Python
En revanche, Python utilise des mécanismes optimisés de gestion des entrées qui tamponnent les entrées par morceaux, réduisant ainsi les appels système et améliorant les performances.
Amélioration de la lecture C Performances
Pour améliorer les performances de lecture de C , deux approches peuvent être adoptées :
Désactiver la synchronisation de Cin avec stdio :
std::cin.sync_with_stdio(false);
Utiliser les fgets Au lieu de cela :
char buffer[1024]; while (fgets(buffer, sizeof(buffer), stdin)) { // process line }
Comparaison des approches
Le tableau suivant compare les performances de diverses implémentations :
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 |
Comme évident, la désactivation de la synchronisation cin ou l'utilisation de fgets améliore considérablement les performances de C , le rendant comparable à Python dans termes de lecture des lignes de stdin.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!