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

Concurrence et multi-thread Java Discussion :

[Thread] Plusieurs threads traités parallèlement sur machine multi-core/processeur ?


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut [Thread] Plusieurs threads traités parallèlement sur machine multi-core/processeur ?
    Bonjour,

    Je travaille actuellement sur la parallelisation d'algorithmes/d'heuristiques très lourds en temps CPU. J'étudie plus particulièrement des méthodes permettant de paralléliser le calcul. Travaillant en Java et sous Linux, je souhaiterais savoir si la JVM (java SE 6) de Sun sous Linux va distribuer les différents threads sur les différents processeurs de la machine ( je developpe sur un quad mais l'objectif est de faire tourner sur un serveur equipé de 16 processeurs). Je n'ai pas vraiment trouvé d'info sur ce sujet, je sais simplement que c'est lié à l'implémentation : je m'etais penché sur le sujet il y a un ou deux ans et il me semble avoir lu que les threads java etaient, sous Windows, interprétés comme des threads natifs contrairement à Linux ou tous les Threads étaient enfermés dans un seul processus natif :/
    Si quelqu'un a des infos sur le sujet ou s'il connait une source d'information, je lui en suis d'avance très reconnaissant

    Bon week end,
    Aurélien

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Que l'on m'arrête si je me trompe mais pour moi, la JVM et l'implémentation du code n'ont aucun pouvoir sur la manière dont vont être répartis les Threads sur les différents processeurs. C'est le système d'exploitation qui gère ça.

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    C'est l'implémentation faite de la JVM et non pas de mon code qui va determiner la façon dont vont etre traités les threads java

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Moi je dirais que c'est les deux : l'OS et la JVM

  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
    Salut,

    Citation Envoyé par iohack
    Que l'on m'arrête si je me trompe mais pour moi, la JVM et l'implémentation du code n'ont aucun pouvoir sur la manière dont vont être répartis les Threads sur les différents processeurs. C'est le système d'exploitation qui gère ça.
    C'est à la fois vrai et faux

    Dans certaines implémentation, la JVM peut gèrer les threads elle-même...



    Je m'explique : dans les systèmes Unix il existe un modèle de gestion de thread basé sur des processus lourds. Donc à chaque création de thread un nouveau processus est créé avec tout ce que cela implique (copie de mémoire et des ressources). Il me semble que cela simplifiait l'implémentation de la répartition des threads entre les différents processeurs, mais cela avait toutetois le désavantage de proposer des performances lamentables dans un environnement mono-thread...


    Du coup les premières JVMs proposaient 2 gestions des threads :
    • La première laissait toutes la gestion des threads au système d'exploitation.
    • Alors que dans le second cas c'est la JVM qui "simulait" la gestion des threads avec un processus unique. C'est ce qu'on appelle les "green threads". Etant donné qu'il n'y a qu'un seul processus il est impossible de distribuer les tâches sur différents processeurs, mais par contre cela se révèle plus performant en mono-processeur car cela évite la création de plusieurs processus...


    On pouvait utiliser les options -native ou -green de java pour passer de l'un à l'autre, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -native -jar MonJar.jar

    Toutefois, la plupart des Unixes actuels propose un "vrai" modèle de thread basé sur des processus légers, ce qui rend obsolète les "green threads" de la JVM, mais il peuvent toutefois être utilisés sur certains systèmes "exotiques" qui ne proposeraient pas de gestion de thread...


    Enfin, il me semble que lorsqu'il sont utilisé, le terme "green thread" est affiché dans la version de Java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String version = System.getProperty("java.version");
    a++

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Merci bien pour toutes ces informations, je vais vérifier tout cela et viendrais poster mes résultats ici même

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/02/2012, 22h35
  2. Équilibrage de threads sur machine multi-coeur
    Par le Benco dans le forum Linux
    Réponses: 1
    Dernier message: 25/05/2010, 13h31
  3. petite question sur le multi core
    Par vmfa-2 sven dans le forum Composants
    Réponses: 4
    Dernier message: 23/05/2008, 14h51
  4. [XPATH] Erreur XPath sur du multi-thread
    Par pvoncken dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/02/2006, 15h19
  5. plusieurs threads ecrivent sur la meme socket
    Par estergiou dans le forum C++
    Réponses: 3
    Dernier message: 04/11/2005, 01h38

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