国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
????Verrouillage du bus?? ?? ?? " > ????Verrouillage du bus?? ?? ??
Maison Java JavaQuestions d'entretien Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

Aug 24, 2023 pm 03:09 PM
Questions d'interview Java

Avant-propos

Partie supplémentaire de la série de programmation simultanée JavaC A S (Comparer et échanger), le style de l'article est toujours plein d'images et de textes, faciles à comprendre, permettant aux lecteurs d'avoir un dialogue fou avec l'intervieweur. C A S(Compare and swap),文章風(fēng)格依然是圖文并茂,通俗易懂,讓讀者們也能與面試官瘋狂對線。

C A S作為并發(fā)編程必不可少的基礎(chǔ)知識,面試時C A S也是個高頻考點,所以說C A S是必知必會,本文將帶讀者們深入理解C A S

C A S code>En tant que connaissance de base essentielle de la programmation concurrente, lors de l'entretien<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px; marge gauche : 2 px ; couleur d'arrière-plan : rgba (27, 31, 35, 0,05) ; famille de polices : ? Operator Mono ?, Consolas, Monaco, Menlo, monospace ; coupure de mot : break-all ; couleur : rgb ( 255, 100, 65);">C A S est également un site de test à haute fréquence, donc C A S est un incontournable, cet article donnera aux lecteurs une compréhension approfondieC A S. ??

Outline

Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

Concepts de base de C A S

C A S(compareAndSwap)也叫比較交換,是一種無鎖原子算法,映射到操作系統(tǒng)就是一條cmpxchg硬件匯編指令(保證原子性),其作用是讓C P U將內(nèi)存值更新為新值,但是有個條件,內(nèi)存值必須與期望值相同,并且C A SL'opération ne nécessite pas de basculer entre le mode utilisateur et le mode noyau, et la mémoire est lue et écrite directement en mode utilisateur ( signifie pas de blocage/thread changement de contexte).

它包含3個參數(shù)<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color : rgba(27, 31, 35, 0.05);famille de polices?: " operator mono consolas monaco menlo monospace de mot break-all rgb> C A S(V,E,N),V表示待更新的內(nèi)存值,E表示預(yù)期值,N表示新值,and V值等于E值時,才會將V值更新成N值,如果V值和E值不等,不做更新,這就是一次C A S的操作。3個參數(shù)C A S(V,E,N),V表示待更新的內(nèi)存值,E表示預(yù)期值,N表示新值,當(dāng) V值等于E值時,才會將V值更新成N值,如果V值和E值不等,不做更新,這就是一次C A S的操作。

Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

簡單說,C A S

Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

簡單說,C A S想象的那樣,說明它已經(jīng)被別人修改過了,你只需要重新讀取,設(shè)置新期望值,再次嘗試修改就好了。??

Comment C A S garantit l'atomicité

L'atomicité signifie qu'une ou plusieurs opérations sont dans C P U fonctionnalités qui ne peuvent pas être interrompues pendant l'exécution. Il est soit exécuté, soit non exécuté, et ne peut pas être exécuté au milieu (celui qui ne peut pas être interrompu ou une séquence d'opérations). C P U執(zhí)行的過程中不被中斷的特性,要么執(zhí)行,要不執(zhí)行,不能執(zhí)行到一半(不可被中斷的一個或一系列操作)。

為了保證C A S的原子性,C P U提供了下面兩種方式

  • 總線鎖定
  • 緩存鎖定

總線鎖定

總線(B U S)是計算機(jī)組件間的傳輸數(shù)據(jù)方式,也就是說C P U與其他組件連接傳輸數(shù)據(jù),就是靠總線完成的,比如C P U

Afin de garantir rgba (27, 31, 35, 0,05) ; famille de polices : ? Operator Mono ?, Consolas, Monaco, Menlo, monospace ; 65);">Atomicité de C A S , C P U fournit les deux méthodes suivantes??
  • Verrouillage du cache
  • ul>

    ????Verrouillage du bus?? ?? ??

    ??Bus (B U S) est une méthode de transmission de données entre composants informatiques, c'est-à-direC P U se connecte à d'autres composants pour transmettre des données, ce qui se fait par bus, tel que C P U lit et écrit la mémoire. ??
    Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

    總線鎖定是指C P U使用了總線鎖,所謂總線鎖就是使用C P U提供的LOCK#信號,當(dāng)C P U在總線上輸出LOCK#信號時,其他C P U的總線請求將被阻塞。C P U使用了總線鎖,所謂總線鎖就是使用C P U提供的LOCK#信號,當(dāng)C P U在總線上輸出LOCK#信號時,其他C P U的總線請求將被阻塞。

    Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS

    緩存鎖定

    總線鎖定方式雖然保證了原子性,但是在鎖定期間,會導(dǎo)致大量阻塞,增加系統(tǒng)的性能開銷,所以現(xiàn)代C P U為了提升性能,通過鎖定范圍縮小的思想設(shè)計出了緩存行鎖定(緩存行是C P ULes novices peuvent également rivaliser avec les enquêteurs BAT : CAS

    緩存鎖定

    ??增加系統(tǒng)的性能開銷,所以現(xiàn)代C P U為了提升性能,通過鎖定范圍縮小的思想設(shè)計出了緩存行鎖定(??緩存行是C P U高速緩存存儲的最小單位??)。??

    Le soi-disant verrouillage du cache fait référence à C P U verrouille la C P U緩存行進(jìn)行鎖定,當(dāng)緩存行中的共享變量回寫到內(nèi)存時,其他C P U會通過總線嗅探機(jī)制感知該共享變量是否發(fā)生變化,如果發(fā)生變化,讓自己對應(yīng)的共享變量緩存行失效,重新從內(nèi)存讀取最新的數(shù)據(jù),緩存鎖定是基于緩存一致性機(jī)制來實現(xiàn)的,因為緩存一致性機(jī)制會阻止兩個以上C P U同時修改同一個共享變量(現(xiàn)代C P U基本都支持和使用緩存鎖定機(jī)制)。

    C A S的問題

    C A S和鎖都解決了原子性問題,和鎖相比沒有阻塞、線程上下文你切換、死鎖,所以C A S要比鎖擁有更優(yōu)越的性能,但是C A S同樣存在缺點。

    C A Sligne de cache

    , et lorsque les variables partagées dans la ligne de cache sont réécrites en mémoire, d'autres C P U détectera si la variable partagée a changé via le mécanisme de détection de bus. Si elle changements, laissez-vous La ligne de cache de variable partagée correspondante n'est pas valide et les dernières données sont à nouveau lues à partir de la mémoire. Le verrouillage du cache est implémenté sur la base du mécanisme de cohérence du cache, car le mécanisme de cohérence du cache empêchera plus de deux C P UModifier simultanément la même variable partagée (??ModernC P U Fondamentalement, tous prennent en charge et utilisent le mécanisme de verrouillage du cache ??). ??<h1 data-tool="mdnice editor" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"> <span style="display: none; "></span>Problème C A S</h1>??<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px; margin- gauche : 2px ; couleur d'arrière-plan : rgba (27, 31, 35, 0,05) ; famille de polices : ? Operator Mono ?, Consolas, Monaco, Menlo, monospace ; saut de mot : break-all ; couleur : rgb ( 255, 100, 65);">C A S et les verrous résolvent tous deux le problème de l'atomicité. Par rapport aux verrous, il n'y a pas de blocage, de changement de contexte de thread et de blocages, donc C A S a de meilleures performances que les verrous, maisC A SIdem Il y a des défauts. ????C A S Le problème avec le code> est le suivant??<ul class="list-paddingleft-2" data-tool="mdnice編輯器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;list-style-type: square;"> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><strong style="color: black;">ne peut garantir que le fonctionnement atomique d'une variable partagée</strong></section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><strong style="color: black;">Le temps de rotation est trop long (basé sur le verrouillage de rotation)</strong></section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><strong style="color: black;"><code style="overflow-wrap: break -word ;remplissage?: 2px 4px;rayon de bordure?: 4px;marge droite?: 2px;marge gauche?: 2px;couleur d'arrière-plan?: rgba(27, 31, 35, 0,05);famille de polices?: " operator mono consolas monaco menlo monospace de mot break-all rgb>ABAQuestionABA問題

    只能保證一個共享變量原子操作

    C A S只能針對一個共享變量使用,如果多個共享變量就只能使用鎖了,當(dāng)然如果你有辦法把多個變量整成一個變量,利用C A S也不錯,例如讀寫鎖中state

    ??

    Une seule variable partagée peut être garantie Opérations atomiques

    C A S

    ne peut être utilisé que pour une seule variable partagée. S'il existe plusieurs variables partagées, vous ne pouvez utiliser que des verrous. Bien s?r, si Il existe un moyen d'intégrer plusieurs variables dans une seule variable, en utilisant C A S est également bon, par exemple en verrouillage lecture-écritureLes bits d'état haut et bas. ??

    Le temps de rotation est trop long

    Lorsqu'un thread ne parvient pas à acquérir le verrou, il ne se bloque pas et ne se suspend pas, mais essaie de l'acquérir à nouveau après un certain temps jusqu'à ce qu'il réussisse. type d'acquisition de boucle Le mécanisme est appelé spin lock (spinlock). spinlock)。

    自旋鎖好處是,持有鎖的線程在短時間內(nèi)釋放鎖,那些等待競爭鎖的線程就不需進(jìn)入阻塞狀態(tài)(無需線程上下文切換/無需用戶態(tài)與內(nèi)核態(tài)切換),它們只需要等一等(自旋),等到持有鎖的線程釋放鎖之后即可獲取,這樣就避免了用戶態(tài)和內(nèi)核態(tài)的切換消耗。

    自旋鎖壞處顯而易見,線程在長時間內(nèi)持有鎖,等待競爭鎖的線程一直自旋,即CPU一直空轉(zhuǎn),資源浪費在毫無意義的地方,所以一般會限制自旋次數(shù)。

    最后來說自旋鎖的實現(xiàn),實現(xiàn)自旋鎖可以基于C A S實現(xiàn),先定義lockValue對象默認(rèn)值11代表鎖資源空閑,0

    L'avantage du verrouillage tournant est que le thread qui maintient le verrou libère le verrou en peu de temps, et les threads qui attendent le verrou concurrent n'ont pas besoin d'entrer dans l'état de blocage (??Pas besoin de changement de contexte de thread/Pas besoin de changement de mode utilisateur et de mode noyau ), il leur suffit d'attendre (??tourner) que le thread détenant le verrou libère le verrou avant de pouvoir l'acquérir, évitant ainsi la consommation de commutation entre le mode utilisateur et le mode noyau. mode noyau. ????Les inconvénients des verrous tournants sont évidents. Les threads détiennent les verrous pendant longtemps, et les threads en attente de verrous concurrents continuent de tourner, c'est-à-dire que le processeur continue de tourner au ralenti et que les ressources sont gaspillées dans des endroits dénués de sens, de sorte que le nombre de tours est généralement élevé. limité. ????Enfin, parlons de l'implémentation du spin lock. L'implémentation du spin lock peut être basée sur C A S implémentation, définissez d'abord lockValueValeur par défaut de l'objet1,1 signifie que la ressource de verrouillage est libre, 0 signifie que la ressource de verrouillage est occupée, le code est le suivant??
    public?class?SpinLock?{
    ????
    ????//lockValue?默認(rèn)值1
    ????private?AtomicInteger?lockValue?=?new?AtomicInteger(1);
    ????
    ????//自旋獲取鎖
    ????public?void?lock(){
    
    ????????//?循環(huán)檢測嘗試獲取鎖
    ????????while?(!tryLock()){
    ????????????//?空轉(zhuǎn)
    ????????}
    
    ????}
    ????
    ????//獲取鎖
    ????public?boolean?tryLock(){
    ????????//?期望值1,更新值0,更新成功返回true,更新失敗返回false
    ????????return?lockValue.compareAndSet(1,0);
    ????}
    ????
    ????//釋放鎖
    ????public?void?unLock(){
    ????????if(!lockValue.compareAndSet(1,0)){
    ????????????throw?new?RuntimeException("釋放鎖失敗");
    ????????}
    ????}
    
    }

    La fonction AtomicInteger類型的lockValue變量,AtomicIntegerJava基于C A S實現(xiàn)的Integer原子操作類,還定義了3個函數(shù)lock、tryLock、unLock

    tryLock est définie ci-dessus - acquérir le verrou

    • 期望值1,更新值0
    • C A S更新C A S更新
    • 如果期望值與lockValue值相等,則lockValue值更新為0,返回true,否則執(zhí)行下面邏輯
    • 如果期望值與lockValue值不相等,不做任何更新,返回false

    如果期望值與lockValue值相等,則lockValue值更新為0,返回 true, -gauche?: 2?px?; couleur d'arrière-plan?: rgba (27, 31, 35, 0,05)?; famille de polices?: "Operator Mono", Consolas, Monaco, Menlo, monospace?; coupure de mot?: break-all?; couleur?: rgb (255 , 100, 65);">lockValue值不相等,不做任何更新,返回false

    ????????unLock函數(shù)-釋放鎖??
    • 期望值0,更新值10,更新值1
    • C A S更新
    • 如果期望值與lockValue值相等,則lockValue值更新為1,返回true,否則執(zhí)行下面邏輯
    • 如果期望值與lockValue值不相等,不做任何更新,返回false

    C A S更新

    ???? ??????如果期望值與lockValue值相等,則lockValue值更新為1,返回

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    Video Face Swap

    échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

    Article chaud

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Sujets chauds

    Tutoriel PHP
    1502
    276
    Intervieweur?: annotations communes et séquence d'exécution de Spring Aop Intervieweur?: annotations communes et séquence d'exécution de Spring Aop Aug 15, 2023 pm 04:32 PM

    Vous devez conna?tre Spring, alors parlons de l'ordre de toutes les notifications d'Aop. Comment Spring Boot ou Spring Boot 2 affecte-t-il l'ordre d'exécution d'aop ? Parlez-nous des pièges que vous avez rencontrés en AOP ?

    Entretien avec un certain groupe?: si vous rencontrez un MOO en ligne, comment devez-vous le résoudre?? Comment le résoudre ? Quelles options ? Entretien avec un certain groupe?: si vous rencontrez un MOO en ligne, comment devez-vous le résoudre?? Comment le résoudre ? Quelles options ? Aug 23, 2023 pm 02:34 PM

    MOO signifie qu'il existe une vulnérabilité dans le programme, qui peut être causée par la configuration du code ou des paramètres JVM. Cet article explique aux lecteurs comment dépanner lorsqu'un processus Java déclenche le MOO.

    Les questions du test écrit d'Ele.me semblent simples, mais elles déconcertent beaucoup de gens Les questions du test écrit d'Ele.me semblent simples, mais elles déconcertent beaucoup de gens Aug 24, 2023 pm 03:29 PM

    Ne sous-estimez pas les questions d’examen écrit de nombreuses entreprises. Il existe des pièges et vous pouvez y tomber accidentellement. Lorsque vous rencontrez ce genre de question de test écrit sur les cycles, je vous suggère de réfléchir calmement et de procéder étape par étape.

    La semaine dernière, j'ai eu un entretien avec XX Insurance et c'était cool ! ! ! La semaine dernière, j'ai eu un entretien avec XX Insurance et c'était cool ! ! ! Aug 25, 2023 pm 03:44 PM

    La semaine dernière, un ami du groupe est allé passer un entretien avec Ping An Insurance. Le résultat a été un peu regrettable, ce qui est bien dommage, mais j'espère que vous ne vous découragerez pas, comme vous l'avez dit, essentiellement toutes les questions rencontrées. l'entretien peut être résolu en mémorisant les questions de l'entretien. C'est résolu, alors s'il vous pla?t, travaillez dur !

    5 questions d'entretien à cordes, moins de 10 % des personnes peuvent toutes y répondre correctement ! (avec réponse) 5 questions d'entretien à cordes, moins de 10 % des personnes peuvent toutes y répondre correctement ! (avec réponse) Aug 23, 2023 pm 02:49 PM

    ?Cet article examinera 5 questions d'entretien sur la classe Java String. J'ai personnellement rencontré plusieurs de ces cinq questions au cours du processus d'entretien. Cet article vous aidera à comprendre pourquoi les réponses à ces questions sont ainsi.

    Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS Aug 24, 2023 pm 03:09 PM

    Le chapitre supplémentaire de la série de programmation simultanée Java, C A S (Comparer et échanger), est toujours dans un style facile à comprendre avec des images et des textes, permettant aux lecteurs d'avoir une conversation folle avec l'intervieweur.

    Une question posée dans presque toutes les interviews Java?: dites-moi la différence entre ArrayList et LinkedList Une question posée dans presque toutes les interviews Java?: dites-moi la différence entre ArrayList et LinkedList Jul 26, 2023 pm 03:11 PM

    La structure des données de Java est au centre de l'entretien. Toute personne ayant participé à un entretien Java doit avoir une certaine expérience. Lorsque les enquêteurs posent de telles questions, ils souhaitent souvent vérifier si vous avez étudié les structures sous-jacentes des types de données couramment utilisés en Java, plut?t que de simplement rester au niveau ??savoir comment utiliser??.

    Intervieweur?:?Parlez-moi du processus de chargement des classes (10 diagrammes) Intervieweur?:?Parlez-moi du processus de chargement des classes (10 diagrammes) Aug 23, 2023 pm 03:05 PM

    Lorsque nous voulons utiliser une classe, nous devons la charger en mémoire via ClassLoader.

    See all articles