Intervieweur: pourquoi un modèle de mémoire Java est - il nécessaire?

Java3y 2021-10-14 09:05:44
intervieweur pourquoi mod le moire


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」UtilisationCPUDes 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」,CPULe 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,CPUIl 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.CPUIl 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).MESIOuvrir 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:MESILe principe du Protocole est probablement:Quand chaqueCPUAvant 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.CPULire simultanément

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

Les candidats:En cas de modification,Description actuelleCPUModification de la valeur de la variable,En même temps,CPUEnvoyer les données avec l'étatinvalid(Invalide)Notification,Obtenir d'autresCPUAprès la réponse(AutresCPUPartager l'état des données(share)Devenirinvalid(Invalide)),À l'heure actuelleCPUÉcrire les données mises en cache au cache principal,Et de mettre son étatmodify(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...MESILe Protocole, c'est le jugement.「État de l'objet」,Selon「État de l'objet」Faire une stratégie différente.La clé estCPULors 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,,CPUEt 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 autresCPURéponse reçueinvalid(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.CPUJ'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 autresCPUN'oubliez pas de changer d'état,Par la suiteCPUJe suis revenu directement pour faire autre chose.Attendez d'avoir reçu les autres.CPUMessage 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,CPUJe peux faire autre chose..Si c'est le cas,CPULes 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 informerCPU2Effectuer cette valeurinvalid(Invalide)Fonctionnement,EtCPU2Peut - être pas encore reçu.invalid(Invalide)Notification,J'ai fait autre chose.,CauseCPU2Lire ou lire les anciennes valeurs.

Les candidats:Même siCPU2Bien reçu.invalid(Invalide)Notification,Mais...CPU1La 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 pourCPUEncore 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 queCPUL'é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 simplifierJavaLe travail des développeurs.JavaUn 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'intervieweurOn 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é:CPUCache sous schéma,Sous chaque noyauL1/L2Cache 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(CPUIl y a probablementstore 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.
  • InCPUNiveau 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 estMESIAccord,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 enCPUSous 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!!

版权声明
本文为[Java3y]所创,转载请带上原文链接,感谢
https://javamana.com/2021/10/20211014090341137d.html

  1. Usage relations and differences of count (1), count (*) and count (a field) in MySQL
  2. 2021 Ali Java advanced interview questions sharing, Java Architect interview materials
  3. Mybatis - dynamic SQL statement - if usage - MySQL series learning notes
  4. [go to Dachang series] deeply understand the use of where 1 = 1 in MySQL
  5. [secret room escape game theme ranking list] Based on spring MVC + Spring + mybatis
  6. Redis log: the killer mace of fearless downtime and rapid recovery
  7. 5 minutes to build redis cluster mode and sentinel mode with docker
  8. Java小白入门200例106之遍历ArrayList的几种方式
  9. Java小白入门200例105之Java ArrayList类
  10. Java小白入门200例104之JDK自带记录日志类logging
  11. Practice of high availability architecture of Tongcheng travel network based on rocketmq
  12. Chapter 9 - Linux learning will - file archiving and compression tar --- zip
  13. Java小白入門200例104之JDK自帶記錄日志類logging
  14. JDK avec journalisation de classe dans 200 cas 104
  15. Java ArrayList Class for Introduction to Java LITTLE WHITE 200 example 105
  16. Plusieurs façons de traverser ArrayList à partir de 200 exemples 106
  17. Provectus / Kafka UI: open source Apache Kafka's Web GUI Graphical interface management tool
  18. Design pattern series: Singleton pattern
  19. Java小白入門200例105之Java ArrayList類
  20. Understanding Java record types
  21. Five load balancing algorithms implemented in Java
  22. Data structure must be an example to understand dynamic programming (with universal Python code)
  23. The idea and implementation of recursion in data structure (Python)
  24. The idea and implementation of linked list (Python)
  25. Data structure must be queue and double ended queue (Python)
  26. Idea and implementation of data structure must be able stack (Python)
  27. Data structure | time complexity (with video explanation)
  28. 20 flutter libraries you should know
  29. Case sharing: Online failure caused by Dubbo 2.7.12 bug
  30. Open source | didi open source, general functional components for Java authentication, authentication, management and task scheduling
  31. Flutter multi engine supports platformview and thread merging solution
  32. In depth understanding of netty: viewing netty traffic control from occasional downtime
  33. Spring AOP internal skill cultivation
  34. Interviewer: is Tomcat a symbolic parent delegation mechanism?
  35. Expérimentez la première tablette de consommation Linux. La puce et le système d'origine sont tous faits maison
  36. 2021 summary of the latest Java common open source libraries, Java interview handwritten code
  37. 2021 latest Java factory interview true questions, Kafka introduction video
  38. 01 javase - première connaissance de l'installation de Java et de l'environnement de développement
  39. The sales volume in September broke the record: Weilai and Xiaopeng both exceeded 10000, with an ideal month on month decrease of 24.7%
  40. Required for interview: HBase block cache
  41. Redis core principle and practice: implementation principle of hash type and dictionary structure
  42. MySQL deep dive: analyzing performance schema memory management
  43. Redis cache: kill interviewer 25 asked
  44. Solution of Chinese garbled code in idea integrated Tomcat console
  45. 2021 the latest java development interview, 46 interview questions take you to understand the advanced Java interview
  46. 2021 spring recruitment bat interview questions are explained in detail and explained clearly
  47. 2021 latest java developer learning route, 2021 latest Ali Java advanced interview questions and answers
  48. 2021 summary of the latest Java common open source libraries, the top java development tools necessary for developers
  49. Java communique avec les capteurs industriels via socket et DTu, RTU
  50. Does Hadoop have to run on Linux? (the root cause is the permission opening advantage of the operating system Linux)
  51. Java communique avec les capteurs industriels via socket et DTu, RTU
  52. 2021 summary of the latest java knowledge system. It took 8 days to finally understand JVM tuning
  53. Introduction au tissu de service Azure
  54. 【.Net vs Java? 】 先来看一下Java和C#的数据类型区别。
  55. 2021 summary of the latest java knowledge system, will you only have the technology of junior engineers
  56. 【.Net vs Java? 】 先來看一下Java和C#的數據類型區別。
  57. [.NET vs Java?] regardez d'abord les différences de type de données entre Java et C #.
  58. 2021 latest Java interview questions and answers, Java interviewer's favorite garbage collection mechanism
  59. 2021 latest Java interview written test, distributed ID generation algorithm in Seata project of source code analysis
  60. 2021 latest Java experience sharing, what java knowledge do we need to learn