[PYTHON] Rivaliser pour les E / S de fichiers dans différentes langues et comparer les vitesses

J'ai lu / écrit un fichier CSV d'environ 1 Go dans plusieurs langages de programmation et je l'ai chronométré!

Règles communes

Tout d'abord, le résultat

Langue Durée moyenne d'exécution 5 fois(Secondes)
C-lang 6.2962
C++ 6.0538
C# 17.1798
Golang 10.3966
Java 21.0840
Python 32.6949
Ruby 30.7153
Scala 21.8364

Après tout, C / C ++ est de loin le plus rapide! !! Passez à la langue à la deuxième place

Exemple d'implémentation

J'ai écrit C ++ pour la première fois en 5 ans, donc je ne pense pas que ce soit beau, mais comme c'était le plus rapide, je le posterai comme échantillon.

Je l'ai implémenté dans d'autres langues en fonction du comportement suivant.

--Calculer le temps moyen exécuté 5 fois --Lisez une ligne et écrivez une ligne

#include <iostream>
#include <fstream>
#include <time.h>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[])
{
    cout << "START!!!" << endl;
    clock_t start, end;
    double time, sum = 0;
    int count = 5;

    for (int i = 0; i < count; i++)
    {
        start = clock();

        ifstream ifs("/fixtures/sample.csv");
        ofstream ofs("./sample.csv");

        const int SIZE = 1024;
        char buffer[SIZE];

        while (ifs.getline(buffer, SIZE))
        {
            // ofs << buffer << endl;C'est vraiment lent
            ofs << buffer << "\n";
        }

        end = clock();
        time = (double)(end - start) / CLOCKS_PER_SEC;
        cout << "Time Result: ";
        cout << fixed << setprecision(4) << time << endl;
        sum += time;
    }

    cout << "C++ Average: ";
    cout << fixed << setprecision(4) << sum / count << endl;

    return 0;
}

Comme mentionné dans les commentaires dans la source, en C ++, écrire avec ʻofs << buffer << endl; `pose un problème en ce que la vitesse diminue considérablement, j'ai donc ajouté moi-même le code de saut de ligne.

Impressions

Comme prévu, le résultat était C / C ++. Puisque Ruby et Python sont des langages de script, je pensais que ce serait lent, mais c'était encore lent. (Peut-être que c'est une question d'écriture) Le langage Go était si rapide que je ne l'avais jamais utilisé au travail, mais cela m'intéressait beaucoup!

Autre

En fait, je voulais faire Rust, mais je l'ai implémenté à mi-chemin en raison d'un manque de connaissances et j'étais frustré, donc je l'ai exclu cette fois. Rust Nous attendons toujours les relations publiques de vos proches!

Aussi, s'il y a une manière d'écrire qui peut se faire plus vite que ma mise en œuvre et que le résultat sera différent de ce classement, j'attends PR! (J'apprécierais que le concept de base reste le même)

Le référentiel créé cette fois

https://github.com/MasanoriIwakura/multi-lang-battle

Recommended Posts

Rivaliser pour les E / S de fichiers dans différentes langues et comparer les vitesses
HMAC en plusieurs langues
J'ai implémenté N-Queen dans différentes langues et mesuré la vitesse
[AOJ] Tri décroissant dans différentes langues
Quels sont le "pipeline" et "{...}" dans le pipeline Jenkins Pipeline {...} (pour les débutants Groovy, pour les langages expérimentés)
Ecrire le fichier O_SYNC en C et Python
J'ai écrit un test unitaire pour différentes langues