écrire avec un thread en binaire ou en ascii ? - C++ - Programmation
Marsh Posté le 02-01-2012 à 16:37:11
ca dépend de tellement de choses ... Notamment de ton OS et de ton architecture, de la dépendance de ton programme à tes I/O
si ton programme utilise massivement des fichiers et que par "écrire des logs en ASCII plutôt qu'en binaire" tu veux dire écrire une quantité de données doublées, alors oui, ca aura un impact, même si tu es dans un autre thread.
Si ton programme est intensif sur un seul coeur sans avoir d'écritures disque et que tu as un autre coeur qui peut se charger de l'écriture des logs, alors ca ne te fera aucune différence.
En bref : on ne peut pas répondre à cette question à ta place, ca dépend entièrement de ton contexte.
Marsh Posté le 04-01-2012 à 15:02:11
theshockwave a écrit : si ton programme utilise massivement des fichiers et que par "écrire des logs en ASCII plutôt qu'en binaire" tu veux dire écrire une quantité de données doublées, alors oui, ca aura un impact, même si tu es dans un autre thread. |
Hello,
si j'ai bien compris :
1- un cœur pour les logs et un autre pour autre chose => zéro différence
2- un cœur avec plusieurs threads dont l'écriture logs ascii/binaire => un impact
c'est ça ? dans le cas 2, pourquoi est ce que cela a un impact, c'est à cause du formatage des données ?
merci encore !
Marsh Posté le 04-01-2012 à 23:52:20
non, tu n'as pas bien compris
Il n'y a pas de cas général sur la problématique dont tu parles. C'est ce qu'il y a à retenir. Le tip top, c'est de faire les deux implémentations et de mesurer la différence de perf dans ton contexte.
Quel que soit la performance au final, tu auras toujours une envie particulière. Quel est le gain, de ton point de vue, d'avoir du texte (lisibilité, possibilité d'éditer les fichiers à la main, ... ?) plutôt que du binaire, ou l'inverse (empêcher un utilisateur boulet de mettre les mains dans le fichier juste en le binarisant, ca peut avoir du sens)
Le formatage des données en ascii peut prendre un peu de temps, c'est certain, mais en fonction du reste de ton programme, ca peut être tout à fait négligeable et n'altérer les performances, disons, que de 0.001%, je n'en sais rien.
Si tu te poses la question pour un fichier de quelques ko (même, quelques centaines de ko) que tu vas écrire ponctuellement, alors tu perds clairement ton temps à te poser ces questions.
Autre hypothèse : tu peux être dans un cas où tu as un soft qui brasse énormément de données sur le disque (soft de base de données sous une grosse charge ou que sais-je encore) et te poser la question de texte ou binaire pour un fichier de trace, avec ... disons ... 2Go de log en texte contre 1Go en binaire. Dans ce cas là, que tu aies plusieurs coeurs ou pas, il est probable que d'utiliser du texte ralentisse ton appli seulement parce que tu vas soumettre ton disque à plus forte contrainte, et ce, que tu sois en mono ou multi core.
Bref, implémente une version "basique" des deux solutions, même si elle couvre pas tous les détails, mais un truc qui te donne une idée dans les grande lignes et mesure les perfs, si tu dois vraiment te poser la question. Tu ne trouveras pas de réponse miracle.
Marsh Posté le 05-01-2012 à 17:29:02
salut theshockwave!
Merci pour ta réponse et ces explications. Je parlais du cas 2 que tu cites, c'est à dire quand on a des gros logs, avec beaucoup d'écritures. Je pensais par exemple à un serveur qui écrit des logs des données reçues/envoyées (donc plusieurs centaines de mégas, voire gigas...). Je vois beaucoup ça dans l'industrie par exemple, les serveurs écrivent en binaires plutôt qu'en ascii pour les "nouvelles" générations.
theshockwave a écrit :
|
Pourrais tu détailler ce que tu entends par "soumettre ton disque à plus forte contrainte" ? ce sont les accès au disque ? C'est cela qui ralentit la perf ?
merci
Marsh Posté le 15-03-2012 à 00:06:27
Potentiellement, oui. Si tu as des acces concurrents intensifs a plusieurs gros fichiers, ta tete de lecture risque de jouer au yoyo.
Si tu manipules des Go de logs et que tu peux te permettre de fournir une appli pour les exploiter, alors ca peut valoir le coup de les faire en binaire ... peut etre
Marsh Posté le 02-01-2012 à 14:07:10
Bonjour,
Si un programme a un thread dédié à l'écriture de logs, le fait d'écrire en binaire ou en ascii change t-il quelque chose au niveau de la performance du programme ...?
merci par avance !