Maison >développement back-end >Tutoriel Python >Pourquoi le « cin » de C est-il considérablement plus lent que le « input() » de Python pour la lecture de lignes à partir de l'entrée standard, et comment les performances peuvent-elles être améliorées ?
Pourquoi la lecture des lignes depuis stdin est-elle beaucoup plus lente en C qu'en Python ?
Problème :
Lorsque l'on compare le code Python et C pour lire les lignes de chaîne d'entrée à partir de stdin, le code Python s'exécute beaucoup plus rapidement. Bien qu'il garantisse une implémentation C appropriée, l'équivalent Python le surpasse d'un ordre de grandeur.
Paramètres par défaut et appels système :
En Python, la mise en mémoire tampon d'entrée est activée par défaut. , ce qui conduit à des lectures efficaces de gros morceaux et à moins d'appels système. En revanche, les flux C sont synchronisés avec stdio, obligeant cin à ignorer la mise en mémoire tampon d'entrée et à lire les caractères individuellement. Ce choix, destiné à éviter les conflits avec les fonctions stdio, introduit par inadvertance une surcharge importante.
Optimisation des performances :
Pour améliorer les performances du C, incluez l'instruction cin.sync_with_stdio(false ) au début de main. Cela désactive la synchronisation des flux et permet une mise en mémoire tampon indépendante, améliorant considérablement la vitesse de lecture des entrées.
Options alternatives :
Une autre alternative hautes performances à cin est fgets, qui utilise des fonctions stdio. pour une lecture par entrée directe.
Résultats de comparaison :
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 |
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!