L'intervieweurJe voulais te parler aujourd'huiJavaModèle de mémoire,Tu connais ce?

Les candidats:Oui.,Laissez - moi vous dire ce que je comprends.Alors je ne sais pas pourquoiJavaLe modèle de mémoire commence

L'intervieweur:Commencez votre spectacle.

Les candidats:Je vais commencer par le contexte

Les candidats:1. Les ordinateurs existants sont souvent multicentriques,Il y aura un cache sous chaque noyau.La mise en cache est née de「CPUEt la mémoire(Mémoire principale)Différence de vitesse」,L1EtL2Le cache est généralement「Chaque noyau est exclusif」Une part..

Les candidats:2. Pour queCPUAméliorer l'efficacité du calcul,Le processeur peut effectuer le Code d'entrée「Exécution désordonnée」,C'est ce qu'on appelle「Réorganisation des instructions」

Les candidats:3. Une modification d'une valeur numérique est souvent non atomique(Par exemple,i++En fait, il est divisé en plusieurs instructions au moment de l'exécution de l'ordinateur)

Les candidats:Sous un seul fil pour toujours,Il n'y a pas de problème avec tout ce qui précède,Parce qu'un seul thread signifie pas de concurrence.Et sous un seul fil,Compilateur/runtime/Tous les processeurs doivent respecteras-if-serialSémantique,Respect des dispositionsas-if-serialÇa veut dire qu'ils n'ont pas raison「Fonctionnement des dépendances des données」Pour réorganiser.

Les candidats:CPUPour l'efficacité, Avec cache 、 Avec le réarrangement des commandes, etc. ,Toute l'architecture devient compliquée.Le programme que nous avons écrit doit vouloir aussi「Suffisant」UtilisationCPU Des ressources !Alors, Nous avons utilisé plusieurs fils

Les candidats: Multithreading signifie concurrence ,La concurrence signifie que nous devons considérer la sécurité des fils

Les candidats:1. Données de cache incohérentes: Modification simultanée de plusieurs fils 「Variables partagées」,CPU Le cache sous le noyau est 「Non partagé」De,Les autres.cacheComment synchroniser les données avec la mémoire?

Les candidats:2. CPULe réarrangement des instructions sous Multithreading provoque l'exécution inattendue du Code,Une situation qui finira par entraîner des résultats incorrects.

Les candidats:Pour「Mise en cache incohérente」Questions,CPU Il y a des solutions. ,Il y a deux sortes de:

Les candidats:1.Utiliser「Verrouillage du bus」:Un noyau dans le processus de modification des données,Aucun autre noyau ne peut modifier les données en mémoire.(Un concept similaire à la mémoire exclusive,Tant qu'il y en a.CPUEn cours de modification, C'est autre chose. CPU Il faut attendre. CPURelease)

Les candidats:2.Protocole de cohérence du cache(MESIAccord, Il y a beaucoup d'accords. ,Juste une chose que tout le monde aurait pu voir).MESI Ouvrir l'anglais oui (Modified (Modifier l'état)、Exclusive ( Statut exclusif )、Share(État du partage)、Invalid(État non valable))

Les candidats:Protocole de cohérence du cache je pense que cela peut être interprété comme「Verrouillage du tampon」, Il vise 「Lignes de cache」(Cache line) En cours"Verrouillage",Ce qu'on appelle「Lignes de cache」En fait, c'est Cache Unit é minimale stockée .

L'intervieweur:Oui....

Les candidats:MESI Le principe du Protocole est probablement :Quand chaqueCPU Avant de lire la variable partagée , Les données seront identifiées en premier. 「État de l'objet」(C'est une modification.、 Ou partager 、 Ou exclusif 、Toujours pas.).

Les candidats: Si c'est exclusif ,Description actuelleCPULes données des variables à obtenir sont à jour, Pas par les autres. CPU Lire simultanément

Les candidats: Si partagé ,Description actuelleCPULes données variables à obtenir sont toujours à jour, Il y en a d'autres. CPU Lire en même temps , Mais il n'a pas été modifié.

Les candidats:En cas de modification,Description actuelleCPU Modification de la valeur de la variable , En même temps, CPU Envoyer les données avec l'état invalid(Invalide)Notification, Obtenir d'autres CPUAprès la réponse(AutresCPU Partager l'état des données (share)Devenirinvalid(Invalide)), À l'heure actuelle CPUÉcrire les données mises en cache au cache principal, Et de mettre son état modify(Modifier)Devenirexclusive(Exclusivité)

Les candidats: Si invalide ,Indique que les données actuelles ont été modifiées,Besoin de relire les données les plus récentes de la mémoire principale.

Les candidats:En fait...MESI Le Protocole, c'est le jugement. 「État de l'objet」,Selon「État de l'objet」 Faire une stratégie différente . La clé est CPULors de la modification des données,Besoin「Synchroniser」Avis diversCPU,Indique que les données ont été modifiées par moi, Vous ne pouvez pas l'utiliser. .

Les candidats: Comparaison avec 「Verrouillage du bus」,MESIAccord"Granulométrie de verrouillage" Plus petit. , Ça doit être plus performant.

L'intervieweurMais d'après ce que je sais,,CPU Et l'optimisation , Tu sais quoi? ?

Les candidats:Oui.,Encore un peu de compréhension.

Les candidats: De ce qui précède ,Ce que vous pouvez découvrir, c'est que:QuandCPULors de la modification des données,Besoin「Synchroniser」 Dis - le aux autres. CPU,Attendre les autresCPU Réponse reçue invalid(Invalide)Après,Il peut écrire les données mises en cache dans le cache principal.

Les candidats:Synchroniser, Ça veut dire attendre. ,Attendre signifie ne rien faire.CPU J'en doute. , J'en ai optimisé un autre. .

Les candidats: L'idée d'optimisation est de 「Synchroniser」Devenir「Asynchrone」.

Les candidats: Lors de la modification 「Synchroniser」 Dis - le aux autres. CPU,Et maintenant écrivez la dernière valeur modifiée à「store buffer」Moyenne, Et informer les autres CPU N'oubliez pas de changer d'état ,Par la suiteCPUJe suis revenu directement pour faire autre chose. Attendez d'avoir reçu les autres. CPU Message de réponse envoyé ,Mettre à jour les données dans le cache.

Les candidats:AutresCPUReçuinvalid(Invalide)Au moment de la notification,Les messages reçus seront également placés dans「invalid queue」Moyenne, Il suffit d'écrire 「invalid queue」Il retournera directement aux données modifiéesCPU État réglé à 「invalid」

Les candidats:Et l'asynchrone crée de nouveaux problèmes: Alors, maintenant. CPUAprès modificationAValeur,Écrire「store buffer」C'est,CPU Je peux faire autre chose. . Si c'est le cas, CPU Les instructions doivent être modifiées. AValeur,Mais la dernière valeur modifiée est toujours「store buffer」Oui., Non modifié dans le cache .

Les candidats:Alors...CPUAu moment de la lecture,Il faut y aller.「store buffer」 Voir si elle existe. , S'il existe, prenez directement ,Il n'y a pas de données pour lire la mémoire principale.【Store Forwarding】

Les candidats:C'est bon,Résoudre le premier problème asynchrone.(Le même noyau lit et écrit les données,À cause de l'asynchrone,Est - ce qu'il est probable qu'il en résulte une deuxième lecture ou une ancienne valeur, Lisez d'abord. 「store buffer」.

L'intervieweurIl y en a d'autres.?

Les candidats: Bien sûr. ,C'est...「Asynchronisation」Cela peut causer des problèmes avec les mêmes variables partagées de lecture et d'écriture de base, Ce qui, bien sûr, conduit 「C'est différent.」Il y a un problème avec les variables partagées de lecture et d'écriture de base

Les candidats:CPU1ModifiéAValeur, La valeur modifiée a été écrite 「store buffer」Et informerCPU2 Effectuer cette valeur invalid(Invalide)Fonctionnement,EtCPU2 Peut - être pas encore reçu. invalid(Invalide)Notification, J'ai fait autre chose. ,CauseCPU2 Lire ou lire les anciennes valeurs .

Les candidats:Même siCPU2Bien reçu.invalid(Invalide)Notification,Mais...CPU1 La valeur de n'a pas été écrite dans la mémoire principale ,C'est...CPU2En lisant à nouveau dans la mémoire principale, C'est une vieille valeur. ...

Les candidats:La plupart du temps, les variables ont「Pertinence」(a=1;b=0;b=a),C'est pourCPU Encore inconscient. ...

Les candidats:En général,Parce queCPUC'est exact.「Protocole de cohérence du cache」 Optimisation asynchrone effectuée 「store buffer」「invalid queue」,Il est très probable que les instructions suivantes n'auront pas accès aux résultats d'exécution des instructions précédentes(L'ordre d'exécution des instructions individuelles n'est pas l'ordre d'exécution du Code),Ce phénomène est souvent appelé「CPUExécution désordonnée」

Les candidats: Pour résoudre le désordre (Peut également être compris comme un problème de visibilité,N'a pas été synchronisé avec les autres à temps après la modificationCPU), Ça recommence. 「Barrière de mémoire」Le concept de.

L'intervieweur:Oui....

Les candidats:「Barrière de mémoire」 En fait, c'est pour résoudre le problème. 「Optimisation asynchrone」Cause「CPUExécution désordonnée」/「 Cache non visible en temps opportun 」La question de, Comment ça va se passer? ?Oui.,C'est ça.「Optimisation asynchrone」Voilà.”Désactiver“Laisse tomber.(:

Les candidats:La barrière mémoire peut être divisée en trois types:Écrire La barrière, Barrière de lecture et barrière omnipotente ( Contient des barrières de lecture et d'écriture ), La barrière peut être comprise simplement comme : Lors de l'exploitation des données , Insérer un élément dans les données " Directives spéciales ". Chaque fois que vous rencontrez cette directive , Tout ce qu'il faut avant. 「Terminé.」.

Les candidats:C'est comme ça qu'on peut comprendre la barrière d'écriture:CPUQuand l'instruction d'écrire la barrière a été trouvée, Va mettre la commande 「Avant」Existe dans「store Buffer」Toutes les instructions d'écriture sont mises en cache.

Les candidats:De cette façon, vous pouvezCPULes données modifiées peuvent être immédiatement exposées à d'autresCPU,Atteindre「Écrire l'opération」 Effets de la visibilité .

Les candidats: La barrière de lecture est similaire. :CPULorsque l'instruction de lire la barrière est trouvée, Va mettre la commande 「Avant」Existe dans「invalid queue」 Toutes les instructions sont traitées

Les candidats:De cette façon, vous pouvez vous assurer queCPU L'état du cache pour est exact ,Atteindre「Lire l'opération」Il a dû lire les derniers effets.

Les candidats:Parce que c'est différentCPULe système de cache du schéma est différent、Le Protocole de cohérence du cache est différent、 La stratégie de réorganisation est différente 、Il existe également des différences dans les instructions de barrière de mémoire fournies,Pour simplifierJava Le travail des développeurs .Java Un ensemble de spécifications est encapsulé , Cette spécification est 「JavaModèle de mémoire」

Les candidats: Plus de détails ,「JavaModèle de mémoire」L'espoir Masquer les différences d'accès entre les différents matériels et systèmes d'exploitation,Promis.JavaL'accès à la mémoire du programme est cohérent sur toutes les plateformes.Le but est de résoudre l'atomicité de l'existence de multithreads、Visibilité(Cohérence du cache) Et la question de l'ordre .

L'intervieweur On pourrait parler. JavaSpécification et contenu du modèle de mémoire?

Les candidats:Non, non., La peur d'une conversation est un après - midi. ,La prochaine fois.?

Résumé de cet article

  • Les trois causes profondes des problèmes de concurrence sont「Visibilité」「Ordre」「Atomicité」
  • Visibilité:CPU Cache sous schéma , Sous chaque noyau L1/L2 Cache non partagé (Invisible)
  • Ordre:Il y a trois principaux aspects qui pourraient mener à la rupture
    • L'optimisation du compilateur entraîne une réorganisation(Le compilateur peut sans changer la sémantique d'un programme monothreadé,Vous pouvez réorganiser l'ordre des déclarations de code)
    • Réarrangement parallèle des ensembles d'instructions (CPUIl est possible de Réarranger les instructions nativement)
    • Réorganisation du système de mémoire(CPU Il y a probablement store buffer /invalid queue Tampon,Ce genre de「Asynchrone」Il est probable qu'il en résultera un réarrangement des instructions)
  • Atomicité:JavaIl faut souvent plus d'une déclaration CPU Instruction terminée(i++),Parce que le changement de fil du système d'exploitation est susceptible de causer i++ Opération inachevée ,Autres fils“À mi - chemin” Variable partagée actionnée i ,Le résultat final n'est pas ce que nous attendions.
  • InCPU Niveau inférieur ,Pour résoudre「Cohérence du cache」Questions,Oui.“Verrouillage”Pour garantir,Par exemple,“Verrouillage du bus”Et“Verrouillage du tampon”.
    • Les serrures de bus sont des serrures de bus ,Les modifications apportées aux variables partagées ne permettent qu'une seuleCPUFonctionnement.
    • La serrure de cache est une ligne de cache de verrouillage (cache line), L'un des plus célèbres est MESIAccord, Marquer l'état de la ligne de cache ,Adoption“ Synchroniser les notifications ”De la façon dont,Pour réaliser(Lignes de cache)Visibilité et ordre des données
    • Mais...“ Synchroniser les notifications ”Affecte le rendement, Donc il y a un tampon mémoire (store buffer/invalid queue)Pour réaliser「Asynchrone」Et donc augmenterCPUEfficacité du travail
    • Après l'introduction du tampon mémoire , Il existe encore. 「Visibilité」Et「Ordre」La question de,La plupart des jours de la semaine sont agréables「Asynchrone」 Avantages , Mais dans quelques cas, , Il faut être fort. 「Visibilité」Et「Ordre」,Seulement"Désactiver" Optimisation du cache .
    • “Désactiver” Optimisation du cache en CPU Sous le niveau 「Barrière de mémoire」,Lire la barrière/Écrire La barrière/ Barrière omnipotente , C'est essentiellement l'insertion d'un "Directive sur les barrières", Faire un tampon (store buffer/invalid queue)Toutes les opérations avant la commande de barrière ont été traitées, Pour atteindre Lire et écrire InCPULe niveau est visible et ordonné.
  • DifférentCPUL'architecture et l'optimisation mises en œuvre sont différentes,JavaPour masquer les différences d'accès à la mémoire entre le matériel et le système d'exploitation,J'ai proposé「JavaModèle de mémoire」Spécifications,Promis.JavaL'accès à la mémoire du programme est cohérent sur toutes les plateformes

Bienvenue sur mon compte Wechat public【Java3y】Viens parlerJavaInterview,Mise à jour continue de la série des intervieweurs en ligne!

【Intervieweur de ligne droite-Mobile end】Série Deux mises à jour continues par semaine!

【Intervieweur de ligne droite-Ordinateur】Série Deux mises à jour continues par semaine!

L'originalité n'est pas facile!!S'il vous plaît!!

L'intervieweur:PourquoiJavaModèle de mémoire?Autre article Afghanistan

  1. S'il vous plaît,Je te le redemande.JavaArrête de me parler de la zone de la méthode de pile pendant que je modélise la mémoire…

    GitHub 4.1k Star DeJavaLe chemin de l'Ingénieur vers Dieu ,Qu'est - ce que c'est que cette serrure?Tu veux savoir? GitHub 4.1k Star DeJavaLe chemin de l'Ingénieur vers Dieu ,De nombreux mécanismes de verrouillage ont été introduits? GitHub 4.1k Star De ...

  2. Une image,Je te laisse parler à l'intervieweur pendant une heure“JavaModèle de mémoire”

    Si l'intervieweur vous demande:Tu le sais. Java Modèle de mémoire? ? Vous pouvez utiliser cette image ,Parlez à l'intervieweur dans l'ordre indiqué sur cette image,Dans des conditions normales,Une heure de conversation, c'est presque,À ce moment - là.,C'est très bénéfique pour votre situation,Parce que l'intervieweur n'a pas beaucoup de temps.

  3. 【Programmation simultanée】Un article pour vous faire comprendreJavaModèle de mémoire(Conditions préalables à l'entrevue)

    Programmation simultanée,Est un point de connaissance essentiel pour les ingénieurs supérieurs,25KSi vous ne comprenez pas la programmation simultanée,C'est presque au Sommet..Mais la programmation simultanée est compliquée,Comment apprendre systématiquement?Ce sujet expliquera systématiquement tous les points de connaissance de la programmation simultanée,Y compris, sans s'y limiter: Mécanisme de communication par fil,En profondeurJM ...

  4. Questions d'entrevue:Tu le sais.JavaModèle de mémoire?(Java7、8、9Différences entre les modèles de mémoire)

    Java Le modèle de mémoire est javaLe programmeur doit comprendre,C'estJavaLa base fondamentale de,Cela nous aide beaucoup dans l'écriture de code, en particulier dans la programmation simultanée.Parce queJava La procédure est confiée à JVMExécuté, C'est pour ça qu'on parle. JavaLa partition de la zone mémoire est en fait ...

  5. Compréhension approfondieJVM(6)——Java Modèles de mémoire et threads

    JavaDéfini dans la spécification de la machine virtuelleJavaModèle de mémoire(Java Memory Model,JMM)Utilisé pour masquer les différences d'accès à la mémoire entre les différents matériels et systèmes d'exploitation,Pour réaliserJavaLe programme peut obtenir un effet d'accès à la mémoire cohérent sur toutes les plateformes(“C'est - à - dire:Ja ...

  6. 【JVM】JVMStructure de la mémoire VS JavaModèle de mémoire VS JavaModèle d'objet

    Original: ANGLAIS:JVMStructure de la mémoire VS JavaModèle de mémoire VS JavaModèle d'objet Java En tant qu'objet orienté ,Langues multiplateforme, Son objet .La mémoire, etc., a toujours été un point de connaissance difficile.Et beaucoup de concepts ont des noms si similaires, Beaucoup de gens sont stupides. ...

  7. JavaModèle de mémoire(JMM)Détails

    InJava JVMDes amis de la série demandent pourquoiJVM,JavaLa machine virtuelle ne nous a pas déjà aidés?Encore une fois,ApprendreJavaLes modèles de mémoire ont le même problème,Pourquoi étudierJavaModèle de mémoire. Leurs réponses sont cohérentes : Peut nous rendre meilleurs ...

  8. JavaDétails des principes liés au modèle de mémoire

    In<JavaModèle de mémoire(JMM)Détails>On en a déjà parlé dans un articleJavaStructure de base du modèle de mémoire et des opérations et règles connexes.EtJavaLe modèle de mémoire tourne à nouveau autour de la façon dont l'atomicité est traitée dans le processus simultané.Les trois caractéristiques de la visibilité et de l'ordre sont construites ...

  9. Modèle de mémoire matérielle à Java Modèle de mémoire,Qu'est - ce que tu sais sur le hardcore?

    Java Modèle de mémoire suivant JVM La structure de la mémoire est très similaire , Je les confonds souvent. ,Mais en fait, ce n'est pas la même chose, Et c'est très différent. , J'espère que tu ne les as pas mélangés. , Surtout pendant les entretiens. ,Si vous vous trompez, vous ne répondez pas aux questions, Influencer vos notes d'entrevue , Bien sûr que si. ...

  10. Distinction JVM Structure de la mémoire、 Java Modèle de mémoire Et Java Modèle d'objet Trois concepts

    Cet article est rédigé par Jane Yue. SimpRead Transcodage, Adresse originale https://www.toutiao.com/i6732361325244056072/ Auteur:Hollis Source::Numéro publicHollis Java Faire ...

Recommandation aléatoire

  1. Définir le fichier comme source (EtsrcC'est pareil)

    Cliquez surproject->properties->java build path->source

  2. JsFonctionnementSelectDaejun!(Valeur、 Définir la sélection )

    JsFonctionnementSelectC'est très courant.,C'est plus pratique.. jqueryFonctionnementselect(Valeur, Définir la sélection ) Chaque opérationselectQuand,Toujours sortir et fouiller les données, Pourquoi ne pas le résumer vous - même? , C'est fini. . Par exemple,<s ...

  3. ASP.NET Mécanisme de la page principale dans

    Page principale utilisée dans le projet , Ça fait longtemps que ça n'a pas marché. , Pas très familier avec les principes ,Je l'ai cherché sur Internet.: http://www.cnblogs.com/_zjl/archive/2011/06/12/2078992.html J'ai le temps. ...

  4. CTO Thé de l'après - midi du Club :Ces choses dans la gestion de l'équipe technique

    Résumé:"CTOThé de l'après - midi"Est un modèle efficace de dialogue collectif,Les participants à l'événement se sont réunis dans le but d'interagir sincèrement et d'apprendre ensemble,Partager vos expériences de travail dans une atmosphère de thé et de discussion.Période en cours"CTOThé de l'après - midi"Le thème de ...

  5. cas ssoSérie de connexion unique4_cas-serverPage d'atterrissage personnaliser le processus de modification(jspModifications de page)

    Tourne.:http://blog.csdn.net/ae6623/article/details/8861065 SSOSérie de connexion unique4:cas-serverPage d'atterrissage personnaliser le processus de modification,NouveauDIY. Objectifs:    ...

  6. (Moyenne) POJ 2991 Crane , Géométrie+Arbre de segment.

    Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...

  7. Front EndjsPlan d'optimisation( Mise à jour continue )

    Lire récemment<Haute performancejavascript>,Notez ici quelques sentiments après la lecture,Avec une certaine compréhension,Suivez mon blog si vous êtes intéresséhttp://www.bloggeng.com/, Je les enverrai de temps en temps. ...

  8. 《Deep Learning》Traduction Chapitre I Préface(Moyenne) Changement de réseau neuronal et changement d'appellation

    Veuillez indiquer la source de la réimpression.. Chapitre I Préface(Moyenne) 1.1 À qui le livre convient - il? ? On peut dire que le livre s'adresse à un public plus large,.Mais ce livre pourrait être plus approprié pour deux catégories de personnes, par exemple.Une catégorie est celle des étudiants qui ont suivi des cours liés à l'apprentissage automatique( Étudiants de premier ou de deuxième cycle ). ...

  9. DevExpress10、RichEditControl

    1.Généralités La tradition.NET Il y a aussi une interface RichTextBoxContrôle, Un contrôle de texte riche , Stocker le texte de l'image , A son propre format de fichier RTF. InDevExpressIl y a un contrôle équivalent dans le Groupe de contrôle,RichEditContro ...

  10. Ne me demande pas à quel point je suis paresseux. , Écrivez un script et courez. django

    Écris.djangoTout le monde le sait., Il faut courir. djangoEnvironnement d'essai,C'est tout. python manage.py runserver C'est bon,Mais un long moment,J'ai l'impression que c'est une perte de temps, Et je suis paresseux. . Les collègues utilisent ct ...