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

Java Discussion :

Parallélisme des données


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut Parallélisme des données
    salut,
    dans mon application je fais le même traitement d'une façon itérative, à chaque itération sur une ligne de matrice.
    ce que je veux c'est mettre en oeuvre du threading sur mes données, de telle façon que je puisse faire ce même traitement en des threads qui agissent sur des lignes et s’exécutent parallèlement chacun sur un processeur Différent.

    qui peux m'aider SVP?

    merci d'avance.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tout dépend du nombre de lignes concernée, mais la solution basique consisterait à créer un thread par ligne. Pour cela, étendre la classe Thread, et dans la méthode run traiter la ligne. Ensuite appeler le start sur tous les threads créés.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tout dépend du nombre de lignes concernée, mais la solution basique consisterait à créer un thread par ligne. Pour cela, étendre la classe Thread, et dans la méthode run traiter la ligne. Ensuite appeler le start sur tous les threads créés.
    je ne pense pas que ca sera une bonne solution, vu que j'ai un grand nombre de ligne c preceque 6000. le traitement de chaque ligne prend preceque 10sec.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par hdioud.ferdaous Voir le message
    je ne pense pas que ca sera une bonne solution, vu que j'ai un grand nombre de ligne c preceque 6000. le traitement de chaque ligne prend preceque 10sec.
    600 lignes par thread, 10 threads. Le principe reste le même

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    600 lignes par thread, 10 threads. Le principe reste le même
    oui c vrai mais je ne veux pas faire l'appel de mes Thread manuellement. j'opte pour l'utilisation du framework qui fais l'affaire

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut le code...
    bon je travailles en JEE avce des EJBs.
    voici la classe qui va faire le multi-threading:

    public class Transform extends RecursiveAction{

    @EJB(name="CreateDecisionMatrix")
    private CreateDecisionMatrix createDecisionMatrix;
    private int min,max;

    public Transform(int min, int max) {
    this.min = min;
    this.max = max;
    }

    @Override
    protected void compute() {
    if(max-min+1<=10)
    process(min,max);
    else
    {
    int milieu;
    milieu=(max-min)/2;
    Transform T1=new Transform(min,milieu);
    Transform T2=new Transform(milieu+1,max);
    T1.fork();
    T2.fork();
    }
    }

    public void process(int min,int max)
    {
    for(int i=min;i<=max;i++)
    createDecisionMatrix.transform2(i);

    }
    le traitement je le réalise dans une servlet comme suit:

    ForkJoinPool pool = new ForkJoinPool(groupSize);
    Transform t = new Transform(3433,3450);
    pool.invoke(t);
    out.println("traitement fini");

    ça marche pas!!! sachant qu'on m'affiche "traitement fini" sans avoir aucun traitement ou changement au niveau de mes tables

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pense à utiliser des balises codes pour rendre ton code lisible.

    Comme il n'y a pas de join nulle part, il n'attends pas que T1 et T2 aient fini


    Autre solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected void compute() {
      if(max-min+1<=10)
          process(min,max);
       else
          {
          int milieu;
          milieu=(max-min)/2;
          Transform T1=new Transform(min,milieu);
          Transform T2=new Transform(milieu+1,max); 
          invokeAll(T1,T2);
        }
    }
    Note: exemple sortant directement de la javadoc hein..

  8. #8
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Juste une petite remarque par rapports aux Threads et à JEE.

    La doc Sun/Oracle dit :
    What restrictions are imposed on enterprise beans?
    [...]
    * create or manage threads
    Source ici.

    Sur internet on peut lire partout qu'il ne faut pas utiliser de Thread en JEE...
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Gugelhupf Voir le message

    Sur internet on peut lire partout qu'il ne faut pas utiliser de Thread en JEE...
    Oui, mais parfois, on n'a pas le choix ^^
    Tu as déjà fait de l'authentification LDAP en j2EE? Je vais t'apprendre un truc, les librairie LDAP de sun créent des threads à crever sans te demander ton avis

    Ce n'est pas qu'il ne faut pas faire de threads en J2EE, c'est qu'il faut être prudent quand on en fait: bien les nettoyer, ben les arrêter, s'assurer qu'ils ne saturent pas la machine (10 threads * 15 utilisateurs, ça commence à faire beaucoup), ....

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Comme le fait remarquer Gugelhupf, la restriction est valable pour les EJBs.
    On peut donc très bien créer des threads dans une servlet par exemple.
    La question qui peut se poser, c'est, est-ce que ce long traitement doit se trouver dans un ejb ?

  11. #11
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    J'ai effectué quelques recherches et j'ai découvert que pour Java EE 7, il existe une spécification JSR-236 qui permet d'utiliser les threads grâce à quelque chose (une API ou framework) qui ressemble au framework Executor.

    Pour plus d'informations : ici.

    En fait je n'en vois pas trop l'intérêt, on dirait vraiment que c'est du Executor avec des nouveaux noms d'interface.

    PS: Désolé de squatter ce topic, mais je trouve que c'est un sujet intéressant les threads en JEE et merci pour l'info tchize_
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

Discussions similaires

  1. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44
  2. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  3. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  4. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

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