yanipig
Messages postés28Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention12 décembre 2005
-
15 févr. 2003 à 13:14
JHelp
Messages postés261Date d'inscriptionjeudi 5 septembre 2002StatutMembreDernière intervention 6 octobre 2005
-
15 févr. 2003 à 14:27
Bonjour a tous,
J'ecris un prog qui lit ligne par ligne des fichiers texte,
avec toute une série de traitements, ... pour les injecter dans une DB.
Ce soft devra traiter +- 700 000 fichiers.
Pour linstant j'essaie de lire ces fichiers le + vite possible.
avant de m attaquer a la partie DB.
J ai 2 questions
* je fais des tests sur seulement 200 fichiers (sans thread) et le temps de traitement passe de 1/22 de sec a 1/21 ... 1/7 ... 1/3. pourquoi cette augmentation de temps de traitement aussi importe?
* serai-t-il judicieux d utiliser des threads?
==> d un cote on me dit que ca ferait gagner un max de temps, de l autre, on me dit que ca ne servirait a rien dans ce cas, mm que ca m en ferait perdre !!!
JHelp
Messages postés261Date d'inscriptionjeudi 5 septembre 2002StatutMembreDernière intervention 6 octobre 200511 15 févr. 2003 à 14:27
Bon je supose que tes traitements de fichiers sont indépandant l'un de l'autre, c'est à dire, que le traiement est le même pour chaqu'un des fichiers et ne dépend pas du résultat d'un traiment, ou partie d'un traitement dans un autre fichier.
L'inconvinient dans faire un traitement, pour un fichier, puis, pour, ... sans Thread, c'est que le temps d'execution est temps de traitment pour 1 + temps pour 2 + ...
Faire un thread par traitement, peu sembler une bonne idée, on se dit, tout ce fait en paralelle, mais ce n'est pas tout a fait vrai, en fait la machine ne fait jamais deux actions en même temps (sauf dans le cas du multiprocésseur), ele fait un bout de l'un, puis un bout de l'autre, ..., puis reprend le premier et en fait un, bout. Expliquer ainsi, on a l'impression que le temps d'execution va être le m^me que ci-dessus. Mais c'est sans compter, que le temps de lancer le traitement sur le denier fichier, le premeir à déjà commencé à travailler, et que si un fichier à finit son traitement, avant les autres, les autres gagneront du temps. Ce qui fait que les thread vont tout de même un peu plus vite. Le probléme que tu risques de rencontrer est la mémoire, car chaque thread sauvegarde son contexte, alors ça dépand du traitementà effectuer, mais il faut multiplier la mémoire qu'il consome par le nombre de fichiers, ce qui peut soit faire ralentir, quand la mémoire est basse, il faut qu'il l'organise plus souvent, ou soit planté par manque de mémoire. La solution pour palier à ce probléme est de fiare par paquet de thread, c'est à diren que si on a 50 thread en marche, on attend que un se libére avant d'en lancr un autre, c'est une solution moyenne, mais il n'y a pas mieux
JHelp