Réseau CPC BIENDEBUTER.NET Crunchez vos adresses URL
|
Calculez la conso électrique de votre PC
|
Hébergez vos photos
+ Reply to Thread
Page 172 of 172 FirstFirst ... 72 122 162 164 165 166 167 168 169 170 171 172
Results 5,131 to 5,140 of 5140
  1. #5131
    Quote Originally Posted by Tomaka17 View Post
    L'ordre d'écriture ne peut pas être important. Le programme doit bien fonctionner même si l'une des deux fonctions démarre alors que l'autre a déjà terminé.
    Ok.
    Bah imagine que chacune de tes fonctions peut écrire 200 lignes de log, tu n'as pas envie qu'ils soient entrelacés, donc le mieux dans l'absolu c'est que chaque invocation ait son stream sans locking, et de collecter les logs à la fin.
    Et ça, ça scalera vachement mieux avec 48 fonctions qui tapent dans le log. Alors oui, il faut adapter son code.

    Quote Originally Posted by Møgluglu View Post
    Boaf, c'est qu'une monade ton truc.
    Vazy batard ta mère c'est un catamorphisme.
    It's the moped lads, they like to think they're bad
    It's the moped lads, if you hit 'em they'll tell their dads

  2. #5132
    Quote Originally Posted by Tramb View Post
    Vazy batard ta mère c'est un catamorphisme.

  3. #5133
    Prenons un autre exemple.

    Imaginons qu'on ait une classe "XMLDocument" qui stocke la structure d'un document XML.

    J'ai une fonction qui modifie le document xml à intervalle régulier. Par exemple toutes les secondes la fonction rajoute un élément dans le document et supprime un élément.
    Et à côté je veux tenir à jour le document xml dans un GUI.

    Supposons que le document XML soit très gros, et qu'on veuille éviter de devoir lire toutes les secondes le document pour chercher les changements.

    Comment vous organiseriez ça ?
    La fonction qui modifie le document XML renvoie des commandes du genre "XMLDocumentAddNodeCommand" ou "XMLDocumentDestroyNodeCommand" ?

    Et si maintenant j'ai deux fonctions qui modifient le document ? Comment je peux les paralléliser ?



    Je vois plusieurs solutions :

    - Soit ce que j'ai dit, c'est à dire les fonctions renvoient des commandes. Sauf que c'est assez lourdingue et difficile à coder. Dans le cas d'un XMLDocument ça pourrait aller, mais si on veut généraliser c'est parfois incompatible avec l'interface qu'offre l'objet.

    - Soit les fonctions renvoient des espèces de std::function<void (auto)> qui est ensuite appelé avec un objet intermédiaire comme paramètre. Mais c'est aussi chiant à coder, et comment on gère le cas où un std::function veut modifier un élément qui a été supprimé par un std::function renvoyé par l'autre fonction ?

    - Soit on passe un "XMLDocument&" à chaque fonction qui modifie, et la fonction renvoie des indications sur ce qu'elle a modifié. C'est déjà moins chiant, mais du coup c'est pas parallélisable.

    - Soit on templétise les fonctions et on leur passe des objets intermédiaires qui vont ensuite synchroniser les changements. Sauf que si je fais "setTextContent(blabla)" et ensuite "getTextContent()" sur cet objet, je m'attends à ce que ça renvoie ce que j'ai modifié, et du coup ça rend l'objet intermédiaire difficile à coder et peu performant.

    - Soit on passe des callbacks aux fonctions qui modifient, mais encore une fois c'est lourd à coder.
    Last edited by Tomaka17; Today at 17h40.
    Profil Steam - Le "17" à la fin de mon pseudo est muet

  4. #5134
    Je propose une autre solution: Chaque fonction bosse sur sa copie privée de XMLDocument, dont les modifs sont timestampées (par exemple). A un point de synchro donné, les copies sont réconciliées et uniformisées.
    "Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution." · 6hit combo!

  5. #5135
    Tu as déjà vu un exemple similaire ou c'est un exercice intellectuel?
    Ca modifie la topologie de l'arbre ou juste les valeurs dans les noeuds?
    Plusieurs clients qui mutent un document en concurrence à partir d'une vue du passé, ça veut dire des conflits potentiels, le problème du codage lui-même est vraiment mineur par rapport aux soucis sémantiques.
    It's the moped lads, they like to think they're bad
    It's the moped lads, if you hit 'em they'll tell their dads

  6. #5136
    Mais du coup tu doubles la consommation mémoire du document XML, qui est très gros.

    Et comment tu fais pour timestamper ? Tu templatises les fonctions et tu passes un objet intermédiaire qui stocke les modifs ?

    ---------- Post added at 17h47 ---------- Previous post was at 17h42 ----------

    Quote Originally Posted by Tramb View Post
    Tu as déjà vu un exemple similaire ou c'est un exercice intellectuel?
    Ca modifie la topologie de l'arbre ou juste les valeurs dans les noeuds?
    Plusieurs clients qui mutent un document en concurrence à partir d'une vue du passé, ça veut dire des conflits potentiels, le problème du codage lui-même est vraiment mineur par rapport aux soucis sémantiques.
    J'avais un exemple real-life similaire où je me suis dit "bon tant pis je fais du single threaded" (mais c'était pas XML).


    Et j'ai un autre exemple real-life, où concrètement je suis en train de coder un moteur de rendu CSS : https://github.com/Tomaka17/LiCssEng
    Et je voudrais savoir quel est le moyen idéal de signaler au moteur de rendu "hey, j'ai modifié telle portion du document xml".
    Sachant que ma classe XMLDocument est un gros blob, parce que je trouve ça plus simple à manipuler : https://github.com/Tomaka17/LiCssEng...MLDocument.hpp
    Profil Steam - Le "17" à la fin de mon pseudo est muet

  7. #5137
    Je ne vois toujours pas en quoi le template va t'aider... Dans tous les cas tu connais ta structure de données, et elle ne change pas. Tu ne vas pas appliquer la même opération à autre chose qui ressemblerait de près ou de loin au XMLDocument.
    "Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution." · 6hit combo!

  8. #5138
    Quote Originally Posted by rOut View Post
    Je ne vois toujours pas en quoi le template va t'aider... Dans tous les cas tu connais ta structure de données, et elle ne change pas. Tu ne vas pas appliquer la même opération à autre chose qui ressemblerait de près ou de loin au XMLDocument.
    Tu disais qu'il faut timestamper les changements dans le XMLDocument, mais comment ?
    Je n'ai pas envie de modifier la classe XMLDocument pour qu'elle stocke la liste des changements, ce n'est pas son rôle. Il faudrait au moins un "XMLDocumentWithTimestamps".
    Profil Steam - Le "17" à la fin de mon pseudo est muet

  9. #5139
    Donc tu as un producteur (l'éditeur) et un consommateur (le renderer), si je ne m'abuse?

    Dans tous les cas tu es dans une problématique très similaire aux snapshots des systèmes de fichiers, et une bonne solution, c'est le copy-on-write.
    Ton renderer prend un snapshot du doc en copiant tout dans un lock global, ce qui devient peu cher avec le COW, puis bosse gentiment sur sa copie.
    Chaque modif dans le producteur prend également le lock global.
    Après tu peux avoir des systèmes hyper raffinés par des locks plus granuleux, mais c'est du taf d'expert.
    It's the moped lads, they like to think they're bad
    It's the moped lads, if you hit 'em they'll tell their dads

  10. #5140
    Quote Originally Posted by Tramb View Post
    Dans tous les cas tu es dans une problématique très similaire aux snapshots des systèmes de fichiers, et une bonne solution, c'est le copy-on-write.
    Ton renderer prend un snapshot du doc en copiant tout dans un lock global, ce qui devient peu cher avec le COW, puis bosse gentiment sur sa copie.
    Chaque modif dans le producteur prend également le lock global.
    En fait c'est déjà plus ou moins ce que je fais.
    Je n'ai pas besoin de stocker de copie du XMLDocument dans mon renderer, mais j'y stocke des données relatives au rendu.

    La problématique, c'est : est-ce qu'il n'y a pas une façon intelligente de signaler au renderer quels sont les changements dans le document ? Si je lui dis juste "flush tes données à propos de ce noeud xml et recharge les données", c'est forcément moins rapide que si je lui dis précisément "tel attribut de tel noeud a été modifié de ça en ça".

    Mais là on s'éloigne un peu du sujet qui était le parallélisme.
    Profil Steam - Le "17" à la fin de mon pseudo est muet

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts