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 :

Question sur les threads


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut Question sur les threads
    Bonjour,

    Je lisais quelques articles autour des threads en java, et je me posais une question sur la visibilité mémoire.

    J'utilise volatile, pour garantir que tous mes threads puissent voir les modifications associées à mon attribut. Idem sur la synchronisation (pour la visibilité) (avec mutex en plus).

    Je lisais dans un article : "toutes les variables qu'il a modifiées sont publiées auprès de tous les autres threads qui les connaissent".

    Ma question (peut-être bête) quand il parle de publier, c'est une publication au sens "les changements dans la heap" ? Ou d'un plus bas niveau comme sur le processeur ?

    Dites moi si je ne suis pas clair dans ma question.
    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pas très clair comme question, quoi le microprocesseur ?

    Le microprocesseur a un cache tout comme toute l'architecture, et donc quand on veut aller lire des données publiées il faut resynchroniser le cache, ce qui est bien géré par l'emploi de volatile ou de synchronized. De même pour tous les caches de tous les niveaux.
    C'est pour ça qu'on dit que les synchronisations ont un prix et qu'il faut pas en faire n'importe comment. D'un autre côté, il en faut pour faire du multithreadé, qui apporte beaucoup.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Ok donc il parle bien d'une publication au niveau du microprocesseur.

    Avec les architectures multi-coeurs, chaque coeurs possède ces propres caches (L1...L3) et registre. Les threads étant répartis sur chacun des coeurs, ils stockent en cache des valeurs (pour des questions d'optimisation). Si je synchronise, je force à ne pas optimiser ses valeurs (donc à les mettre en cache). Donc si je comprends bien ta réponse, il publie la valeur dans chacun des caches des coeurs ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    "Publication" n'est pas vraiment le mot. Il indique que cette portion de la mémoire a été modifiée par un cœur, et que les caches des autres ne sont plus synchrones avec la mémoire centrale.
    Mais les autres ne s'en soucieront qu'au moment opportun, genre au prochain accès à cette zone.

    Ce que je veux dire c'est que le travail d'un cœur n'a pas d'effet direct sur les caches des autres cœurs, il n'aura qu'un effet a posteriori s'ils se retrouvent concernés à un moment. Et notamment ils prendront tous les changements d'un coup au lieu de l'un après l'autre*.

    * Enfin c'est le grand classique. Il y a des architectures sans cache.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    L'utilité d'employer le mot clé volatile sur un attribut, c'est que celui-ci est susceptible d'être utilisé dans plusieurs portion de code exécuté par un thread.

    Le problème en Java, c'est que les opérations sur les variables ne sont pas forcément atomiques (les valeurs sont conservés dans un cache dans un but d'optimisation je crois), du coup si tu as une variable qui a une valeur X à un instant T1 et Y à un instant T2 dans Thread A, cette variable pourrait toujours avoir la valeur X à l'instant T2 dans le Thread B.

    Je pense que cette histoire de "publication" revient à dire en gros : Thread A a modifié la variable volatile et sa valeur actuelle sera "publié" à Thread B.

    PS : adiGuba est plusieurs fois intervenu sur ce type de sujet, n'hésite pas à effectuer une petite recherche
    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

  6. #6
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Merci pour vos réponses.

    @Gugelhupf Pardon si je n'ai pas été clair, mais je pense avoir compris la fonction de volatile avec les threads au sein d'une application java.

    En faite, j'aurai aimé comprendre comment côté processeur, et du multi-coeur, cela fonctionnait.

    Après avoir lu les 4 premiers chapitre de Java Concurrency, ca n'est pas expliquer. Peut être dans les chapitres suivants.

Discussions similaires

  1. Question sur les threads
    Par thebloodyman dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 22/01/2007, 07h28
  2. Questions sur les threads: généralités
    Par Gragra dans le forum C++
    Réponses: 9
    Dernier message: 04/11/2006, 16h28
  3. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 13h27
  4. Question sur les threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 21/10/2005, 09h08
  5. Question sur les threads
    Par nicolas66 dans le forum MFC
    Réponses: 4
    Dernier message: 03/06/2005, 20h57

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