Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

ifstream et lecture réseau


Sujet :

SL & STL C++

  1. #1
    Membre émérite
    ifstream et lecture réseau
    Hello,

    Je dois charger en RAM (mémoire partagée) plusieurs Go de données. Pour la lecture, j'utilise un ifstream.

    • Si je fais cette opération en local, cela me prend quelques minutes.
    • Si je transfère les données d'un endroit distant sur un emplacement local (en dehors du code, via un bête glisser-déposer dans l'explorateur), cela me prend quelques minutes.
    • Si j'utilise le ifstream en le faisant aller lire les données via le réseau, cela prend une demi-heure.


    Qu'est-ce qui peut, dans le dernier, cas expliquer une telle explosion du temps de chargement ?

  2. #2
    Membre chevronné
    Si tu dois lire des donnees sur le reseau, tu es limite par la limite de ce reseau. Exemple, tu es limite a 20 Mo/s.

    Cela te donne en gros 20 minutes pour un Go. Il n'y a pas moyen de faire mieux ainsi.

    Par-contre, si tu n'as pas besoin de toutes les donnes tout de suite, tu peux faire en sorte de telecharger les "prioritaires" d'abord et seulement ensuite le reste. Et si les donnees a telecharger sont toujours les meme, tu peux meme les stocker sur le disque local afin de ne pas avoir besoin de les retelecharger.
    Il y a 10 sortes de gens : ceux qui comptent en binaire et les autres.

    "Premature optimization is the root of all evil" --Donald Knuth
    traduction : "L'optimisation prématurée est la racine de tous les maux" -- Donald Knuth

    Si vous voulez apprendre à développer en Rust, un tuto (en français) est disponible ici.
    Si vous voulez voir mes projets, c'est sur github que ça se passe.

  3. #3
    Membre émérite
    Citation Envoyé par imperio Voir le message
    Si tu dois lire des donnees sur le reseau, tu es limite par la limite de ce reseau.
    Pas seulement, puisque la somme du temps nécessaire pour faire un bête transfert réseau et du temps pour charger les données en local est 3 fois plus courte que de faire le chargement à travers le réseau.

  4. #4
    Membre chevronné
    Citation Envoyé par oodini Voir le message
    Pas seulement, puisque la somme du temps nécessaire pour faire un bête transfert réseau et du temps pour charger les données en local est 3 fois plus courte que de faire le chargement à travers le réseau.
    Je crois avoir compris ce coup-ci (si ce n'est pas le cas, n'hesite surtout pas a me corriger). J'aurais tendance a penser qu'une fois qu'une donnee est arrivee tu l'interpretes aussitot en mettant en pause les transferts. Je me trompe ?
    Il y a 10 sortes de gens : ceux qui comptent en binaire et les autres.

    "Premature optimization is the root of all evil" --Donald Knuth
    traduction : "L'optimisation prématurée est la racine de tous les maux" -- Donald Knuth

    Si vous voulez apprendre à développer en Rust, un tuto (en français) est disponible ici.
    Si vous voulez voir mes projets, c'est sur github que ça se passe.

  5. #5
    Membre émérite
    Exact.

  6. #6
    Membre chevronné
    Dans ce cas quel est le probleme ? Je te recommenderai bien les threads mais je pense que tu y as deja pense etant donne ton grade...

    Pour repondre a ta question initiale, je pense donc que tu dois paralleliser les traitements et le telechargement des donnees.

    Pour le coup j'ai vraiment pas l'impression de t'apporter une reponse...
    Il y a 10 sortes de gens : ceux qui comptent en binaire et les autres.

    "Premature optimization is the root of all evil" --Donald Knuth
    traduction : "L'optimisation prématurée est la racine de tous les maux" -- Donald Knuth

    Si vous voulez apprendre à développer en Rust, un tuto (en français) est disponible ici.
    Si vous voulez voir mes projets, c'est sur github que ça se passe.

  7. #7
    Membre émérite
    Le traitement en question consiste simplement à ranger ce que je viens de lire en mémoire, après avoir appliqué un reinterpret_cast.