IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Une erreur de threads


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Une erreur de threads
    Bonjour, je fait un programme qui analyse des gros fichiers, pour cela celui-ci découpe les fichiers en blocs dans un buffer, puis analyse ceux-ci sur différents threads pour gagner du temps. Mon problème est que j'ai fait en sorte qu'il y ai un thread par cœur de processeur, mais je me retrouve vite avec une centaine ou une répartition catastrophique... (Ne vous inquietez pas pour mes variables en anglais catastrophique )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    //Récupération des infos du processeur.
    OperatingSystemMXBean bean = ManagementFactory.getOperatingSystemMXBean();
    		maxThreads = bean.getAvailableProcessors();
    		log.note("Nombre de threads disponibles: " + maxThreads);
     
    //Lancement initial des threads.
    			Thread Analysing[] = new Thread[maxThreads];
    			for(int i = 1; i < maxThreads; ++i){
    				log.debug("Lancement du thread n°" + i + " avec le bloc n°" + i);
    				Analysing[i] = new Thread (new Analysing(i, 5, i));
    				Analysing[i].start();
    				launched++;
    			}
    			int tstop = 0;
    			boolean onGoing = true;
    //Relancement des threads jusqu'a ce que tous les blocs soient analysé
    			while (onGoing){
    				for(int i = 1; i < maxThreads; ++i){
    					if (Analysing[i].getState() == Thread.State.TERMINATED && launched < buffer.lenght()){
    						log.debug("Relancement du thread n°" + i + " avec le bloc n°" + launched);
    						Analysing[i] = new Thread (new Analysing(launched, 5, i));
    						Analysing[i].start();
    						launched++;
    					}
    // A partir d'ici il y a une erreur mais j'ai la flemme de la régler pour l'instant
    					else if(launched > buffer.lenght() && Analysing[i].getState() == Thread.State.TERMINATED){
    						tstop++;
    						if (tstop == maxThreads){
    							onGoing = false;
    						}
     
    					}
    				} 
    			}
    			log.debug("Taches terminees.");

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Houla, c'est le bordel

    Si tu veux répartir N tâches à travers O threads, le mieux est d'utiliser un TreadPoolExecutor et de lui fournir des Task. C'est typiquement fait pour t'éviter ce genre de plomberie

    Attention, ce n'est pas parce que tu as 4 processeurs et 4 thread, que chacun ira sur un processeur. Un thread, dans un OS, ça voyage beaucoup

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci je vais essayer ça. Je sais que le thread voyage, mais j'essaye de repartir quand même la charge, même si c'est désespéré

Discussions similaires

  1. [Thread] une erreur dans un de nos tuto?
    Par TheBlackReverand dans le forum C#
    Réponses: 5
    Dernier message: 15/06/2008, 20h21
  2. [Threads] Savoir si un thread a provoqué une erreur
    Par anykeyh dans le forum Windows
    Réponses: 6
    Dernier message: 26/04/2006, 16h12
  3. [VB6] Source D'une erreur
    Par krest dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/07/2003, 18h33
  4. [procédure PG] Une erreur mystérieuse...ou pas
    Par doohan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/07/2003, 18h16
  5. Ne pas formater une erreur
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/03/2003, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo