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 ?

Pourquoi la lecture des lignes depuis stdin est-elle plus lente en C qu'en Python, et comment peut-elle être améliorée ?

Susan Sarandon
Libérer: 2024-11-25 15:54:11
original
230 Les gens l'ont consulté

Why is Reading Lines from stdin Slower in C   than in Python, and How Can It Be Improved?

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 :

  1. Désactiver la synchronisation de Cin avec stdio :

    std::cin.sync_with_stdio(false);
    Copier après la connexion
  2. Utiliser les fgets Au lieu de cela :

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), stdin)) {
        // process line
    }
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal