Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2740 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  mes threads font ce qu'il veulent ! [Pas tout à fait resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mes threads font ce qu'il veulent ! [Pas tout à fait resolu]

n°907387
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 25-11-2004 à 05:13:51  profilanswer
 

salut,
 
  j'essaye de pinguer plusieurs sites à la volée donc évidemment j'ai voulu passer par des threads pour aller plus vite.
 
Donc j'ai pris une sub, je lui ais mis le test  

Code :
  1. my $pong = Win32::PingICMP->new('icmp', 2);
  2. if ($pong->ping($site, 1))


et je la thread avec

Code :
  1. @thr[$k] = threads->new(\&sub1, $site);


jusque là tout va bien il me ping bien rapide et me sort aussi les erreurs, la où ca commence à merdouiller c'est quand je lui dis d'écrire en base de donnée, donc j'ai plutôt essayé en fichier texte mais là ca marche quand ca veut pareil pour le getstore de l'url.
 
Ya aussi un autre problême c'est que pour que ca marche, j'ai du lui faire un detach

Code :
  1. @thr[$k]->detach;


donc j'ai plus le contrôle de mes ptits :pt1cable: ce qui m'empêche de décrémenter mon $k et de killer mes threads.
 
en même temps je dois ptêtre mal utiliser mes threads alors si qqun si connait qu'il hésite pas :whistle:


Message édité par bill_clinton le 02-12-2004 à 11:44:40
mood
Publicité
Posté le 25-11-2004 à 05:13:51  profilanswer
 

n°912770
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 02-12-2004 à 11:34:31  profilanswer
 

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 :
  1. 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 :
  1. open fich_ping, ">>liste_sites_ping.txt";
  2. open fich, "<liste.txt";
  3. $marche = 0; $ok = 0; $k = 0;
  4. my @thr_valeur : shared;
  5. my @thr_sites : shared;
  6. $pong = Win32::PingICMP->new('icmp', 2);
  7. #*************************************************************************************************
  8. #**************** Thread de ping, partage les tableaux @thr_valeur et @thr_sites *****************
  9. sub sub1()
  10. {my $site_ping = "www.".@_[0].".com";
  11. my $num = @_[1];
  12. if ($pong->ping($site_ping, 1))
  13. {@thr_valeur[$num] = 1;
  14.   print "$num -- @_[0] ----- en attente.\n";}
  15. else {@thr_valeur[$num] = 2;}}
  16. #************* Fin de thread de ping, partage les tableaux @thr_valeur et @thr_sites *************
  17. #*************************************************************************************************
  18. sub log_et_store(;$$$)
  19. {print fich_ping "$_[0]\n";  getstore($_[1], $_[2]);}
  20. while(<fich> )
  21. {chomp;
  22. if (/$ARGV[0]/) {$ok = 1;}
  23. if ($ok == 1)
  24. {$k++;  $site = "www.".$_.".com";
  25.   @thr_valeur[$k] = 0;
  26.   $deja_pinge = 0;
  27.   for ($i = 1; $i <= $k; $i++)
  28.   {if (@thr_valeur[$i] > 0)
  29.   {if (@thr_valeur[$i] == 1)
  30.    {log_et_store(@thr_sites[$i], "http://www.".@thr_sites[$i].".com", @thr_sites[$i].".html" );
  31.     print $i." -- @thr_sites[$i] ----- pris pour $k\n";  @thr_valeur[$i] = 3;  @thr_sites[$i] = "";}
  32.     if (@thr_valeur[$i] == 2)
  33.    {print $i." -- @thr_sites[$i] ----- perdu pour $k\n";  @thr_valeur[$i] = 3;  @thr_sites[$i] = "";}
  34.     @thr[$i] = 0;
  35.    if ($deja_pinge == 0)
  36.    {@thr_valeur[$i] = 0;  @thr_sites[$i] = $_;
  37.     @thr[$i] = threads->new(\&sub1, $_, $i);  @thr[$i]->detach;
  38.     print ".................................".$i." -- ping $_ pour $i\n"; $deja_pinge = 1; $k--;}
  39.   }
  40.  }
  41.   if ($deja_pinge == 0)
  42.  {@thr[$k] = threads->new(\&sub1, $_, $k);  @thr[$k]->detach;
  43.   @thr_valeur[$k] = 0;  @thr_sites[$k] = $_;
  44.   print "....................................................".$i." -- ping $_ pour $k\n";}
  45. }}
  46. $pong->close();
  47. #$db->Close();
  48. close fich;
  49. 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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  mes threads font ce qu'il veulent ! [Pas tout à fait resolu]

 

Sujets relatifs
[C/UNIX] *Resolu* Les threads[SQL / Résolu] Création d'une vue depuis une PS
[PHP] Recuperer des valeurs = 0 apres un post [Resolu]spécifier la couleur de <hr > (xhtml 1.0) [résolu]
probleme de requete[resolu][tomcat][log4j] Résolu : séparer les logs
tableau de session / foreach[resolu]sql : mais d'ou sort ce 1, dans ce champ?? [résolu]
[ Resolu] Pb affichage calque 
Plus de sujets relatifs à : mes threads font ce qu'il veulent ! [Pas tout à fait resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR