AnsweredAssumed Answered

utilisation des threads

Question asked by fmarin on Sep 13, 2013
Mon but est de profiter d'un serveur possédant 2 processeurs 16 coeurs pour accélérer un traitement de flux volumineux de documents.

J'ai exploré la voie du multi-thread, qui améliore l'ensemble, mais pas dans les proportions que j'attendais (l'explication, si j'ai bien compris, vient du fait que les threads s'exécutent dans le même contexte java).

Par curiosité, quelle technique doit on utiliser pour gérer le niveau de multi threading ? … je n'ai pas réussi à trouver d'exemple

Y aurait il une autre solution ?

pour l'exemple, voici le code expurgé (chaque thread devant être indépendant et donc "embarquer" ses variables)


protected Map<String, Object> executeImpl(final WebScriptRequest req,
   Status status, Cache cache)
{
   for (int i = 0; i < 10; i++) {
      System.out.println("\n============> passage no: "+i);
      ThreadTest2 test = new ThreadTest2(registry, i);
      Thread t = new Thread(test);
      t.start();
   }
   Map<String, Object> model = new HashMap<String, Object>();
   model.put("mess", "hello old boy");
   return model;
}


le thread appelé

<java>
public ThreadTest2(ServiceRegistry registry, int pos) {
   this.registry = registry;
   this.nodeService = registry.getNodeService();
   …/…
   this.pos = pos;
}
@Override
public void run() {
   System.out.println("\nStart thread - pos="+pos);
   for(int i = 0 ; i < max ; i++){
      …/…
      System.out.println("traitement doc "+pos+"["+i+"]");
   }
   System.out.println("Stop thread - pos="+pos);
}

Outcomes