bill_clinton nonon j'ai pas de stagiaire .. | en fait j'utilisais mes variables n'importe comment (plus la sortie fichier et db dans le thread ce qui était un peu aléatoire) :
par contre j'ai lu un truc sur le web :
Code :
- La chose la plus importante à garder à l'esprit quand on compare les ithreads à d'autres modèles de gestion des threads est le fait que pour chaque thread créé, une copie complète de toutes les variables et données du thread parent doive être faite. La création d'un thread peut donc être coûteuse en termes de mémoire autant que de temps de calcul. La meilleure façon de réduire ces coûts est d'avoir un faible nombre de threads qui vivent longtemps, tous créés assez tôt - avant que le thread de base n'ait accumulé trop de données en mémoire. Bien sûr, après qu'un thread a été créé, ses performances et son occupation mémoire devraient être peu différente que celles de code ordinaire.
|
Ce qui m'amène à l'autre problême -> dans mon cas, je suis bien obligé de créer mes threads dans une boucle, par contre je ne dépasse pas 30 à 35 threads qui tournent en même temps, grâce à mon tableau, je stocke mes threads et dès qu'un à terminé il laisse sa place à quelqu'un d'autre. Ce qu'il y a c'est que ma charge dédié grimpe assez vite, donc qu'en est il, est-ce que ca vient de mes threads ou d'autre chose ?
je laisse un bout de code au cas où (pas la peine de me dire que l'algo est bidon, je le sais déjà) :
Code :
- open fich_ping, ">>liste_sites_ping.txt";
- open fich, "<liste.txt";
- $marche = 0; $ok = 0; $k = 0;
- my @thr_valeur : shared;
- my @thr_sites : shared;
- $pong = Win32::PingICMP->new('icmp', 2);
- #*************************************************************************************************
- #**************** Thread de ping, partage les tableaux @thr_valeur et @thr_sites *****************
- sub sub1()
- {my $site_ping = "www.".@_[0].".com";
- my $num = @_[1];
- if ($pong->ping($site_ping, 1))
- {@thr_valeur[$num] = 1;
- print "$num -- @_[0] ----- en attente.\n";}
- else {@thr_valeur[$num] = 2;}}
- #************* Fin de thread de ping, partage les tableaux @thr_valeur et @thr_sites *************
- #*************************************************************************************************
- sub log_et_store(;$$$)
- {print fich_ping "$_[0]\n"; getstore($_[1], $_[2]);}
- while(<fich> )
- {chomp;
- if (/$ARGV[0]/) {$ok = 1;}
- if ($ok == 1)
- {$k++; $site = "www.".$_.".com";
- @thr_valeur[$k] = 0;
- $deja_pinge = 0;
- for ($i = 1; $i <= $k; $i++)
- {if (@thr_valeur[$i] > 0)
- {if (@thr_valeur[$i] == 1)
- {log_et_store(@thr_sites[$i], "http://www.".@thr_sites[$i].".com", @thr_sites[$i].".html" );
- print $i." -- @thr_sites[$i] ----- pris pour $k\n"; @thr_valeur[$i] = 3; @thr_sites[$i] = "";}
- if (@thr_valeur[$i] == 2)
- {print $i." -- @thr_sites[$i] ----- perdu pour $k\n"; @thr_valeur[$i] = 3; @thr_sites[$i] = "";}
- @thr[$i] = 0;
- if ($deja_pinge == 0)
- {@thr_valeur[$i] = 0; @thr_sites[$i] = $_;
- @thr[$i] = threads->new(\&sub1, $_, $i); @thr[$i]->detach;
- print ".................................".$i." -- ping $_ pour $i\n"; $deja_pinge = 1; $k--;}
- }
- }
- if ($deja_pinge == 0)
- {@thr[$k] = threads->new(\&sub1, $_, $k); @thr[$k]->detach;
- @thr_valeur[$k] = 0; @thr_sites[$k] = $_;
- print "....................................................".$i." -- ping $_ pour $k\n";}
- }}
- $pong->close();
- #$db->Close();
- close fich;
- close fich_ping;
|
fich --> c'est le fichier qui contient les sites à pinguer
fich_ping --> qui contient les sites ayant passé le test
@thr_valeur --> l'état du site à pinguer (0-en cours, 1-réussi, 2-rejeté, 3-prêt à être remplacé)
@thr_sites --> le nom du site (sans "http://www." ni ".com" )
@thr --> le tableau des threads Message édité par bill_clinton le 02-12-2004 à 11:44:08
|