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

Langage Java Discussion :

Singleton et multithread


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 41
    Points
    41
    Par défaut Singleton et multithread
    Bonjour,
    J'implemante actuellement un algorithme de branch and bound à plusieurs critèteres et utilisant bcp de donneés. Donc traitement lourd.
    J'ai conçu au depart mon code en trois couches. Un sigleton contenant toutes les données d'un probleme a resoudre. Des classes de traitement qui voient toutes la meme singleton de données. Une classe d'affichage des resultats.

    Je souhaite tester l'algo sur des centaines de problemes histoire d'avoir des statistique assez representatives... Or le traitement de chaque probleme prend en moyenne 8 minutes. Au lieu de faire une boucle sur les centaines de problemes, je souhaite lancer chaque probleme dans un thread different.

    Le probleme est que tous les thread voient la meme instance du singleton de données et du coup j'ai pas exactement ce que je souhaite faire!

    Si quelqu'un a une idée pour résoudre ce probleme de conception?

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu es dans le cas typique de mauvaise utilisation du singleton : tu as utilisé le pattern Singleton uniquement pour simplifier l'accès à tes données, et non pas parce que ces données étaient unique.

    Tu devrais plutôt manipuler des instances et oublier le pattern singleton.

    a++

    PS : Et attention : l'utilisation de thread ne signifie pas forcément que le résultat sera plus rapide. Cela dépend des ressources de ta machine et en particulier le nombre de processeur/coeur...

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et si tu as besoin d'accélérer ton B&B en lui même, il est possible de passer sur du B&B dynamique, éventuellement en parallèle (de souvenir, je n'ai plus touché à ces merveilles depuis la fin de mes études)

    Cf http://perso.ens-lyon.fr/paul.feautrier/slides-ch3.pdf
    http://hal.inria.fr/docs/00/29/15/60...-article21.pdf

    Ou alors laisser tomber le B&B pur et passer sur des méta heuristiques un poil plus violentes (algos gen, recuit simulé & cie)..
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    Merci à vous tous pour ces eclairciscements:
    @adiGuba:
    Merci bcp pour ton message. Je suis tout a fait d'accord avec toi. Je suis dans un mauvais cas d'utilisation de singleton. En fait, ce qui m'embetais dans la manip des instances de mes données ce que je voulais pas avoir des diplicatations tres couteuses en memoire. Mon objet donnée pèse quand meme. J'ai garanti l'utilisation d'une seule reference par thread (en réalité une seule instance).
    Ma machine est bien à 8 cores ... j'utilise un pool de 10 thread pour lancer mes cas de test.
    J'ai meme essayé d'utiliser des Future/Callable pour calculer les bornes de mon BnB, cela a induit des problemes que je veux pas evoquer mnt...
    @sinok:
    Merci. Je suis vraiment soucieux d'avoir une façon d'accelerer mon algo. Le seul reproche que j'ai mnt est le temps de calcul.
    En fait, j'ai un probleme à 3 critères et une structure de contraintes simple. Il se modelise avec un programme en nombres entiers. Les deux premiers criteres sont lineaires et le troisieme est quadratique. Le calcul des bornes pour le critere quadratique est assez lourd.
    Ce que tu m'as proposé (l'article Dynamic Branch & Bound Distribué) marche plutot pour des problemes d'optimisation sous contraintes ce qui est un peu differents de la programmation en nombres entiers bien que la famille de methodes Bnb soit utilisée dans les deux types de problèmes.

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par khalid_kha Voir le message
    En fait, ce qui m'embetais dans la manip des instances de mes données ce que je voulais pas avoir des diplicatations tres couteuses en memoire. Mon objet donnée pèse quand meme.
    Heu... Lorsque tu manipules des objets en Java tu manipules en fait des références. Donc lorsque tu passes un objet, tout ce que tu copies c'est sa référence, et non pas son contenu...


    a++

Discussions similaires

  1. Singleton et multithread
    Par totoche dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/05/2010, 19h05
  2. [Singleton] singleton et multithreading
    Par behess dans le forum Design Patterns
    Réponses: 17
    Dernier message: 24/09/2009, 19h33
  3. Singleton et Multithreading
    Par behess dans le forum C#
    Réponses: 22
    Dernier message: 09/09/2009, 12h09
  4. Singleton et multithreading
    Par Alp dans le forum C++
    Réponses: 17
    Dernier message: 06/08/2006, 03h49

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