日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
每天一道面試題-CPU偽共享

前言:

了不起:又到了每天一到面試題的時候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊

白云鄂網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

了不起學(xué)弟:最近學(xué)習(xí)的還不錯,每天都在學(xué)習(xí),每天都在進步!

了不起:那你最近學(xué)習(xí)的什么呢?

了不起學(xué)弟:最近在學(xué)習(xí)CPU偽共享,但是不太理解,能不能給我講講呢?

正文:

首先,我們先了解一下CPU的緩存模型。

CPU的緩存分為三層,一級緩存,二級緩存,三級緩存。

如果要獲取一個內(nèi)存中的數(shù)據(jù),首先會從一級緩存中獲取,如果一級緩存中沒有,就會從二級緩存中獲取,如果二級緩存中沒有,就會從三級緩存中獲取,如果三級緩存中沒有,就會從內(nèi)存中獲取。

一級緩存是最快的,越到后面就越慢。那CPU的緩存,是由緩存行組成的,每個緩存行的大小是64字節(jié),也就是說,如果我們要獲取一個數(shù)據(jù),那么就會把這個數(shù)據(jù)所在的內(nèi)存地址,以及這個數(shù)據(jù)所在的內(nèi)存地址的前后64字節(jié)的數(shù)據(jù),都會加載到緩存行中。

聊到這里,我就給大家看看常見的偽共享問題的案例。

假設(shè)有兩個線程a和b,同時有兩個long類型的變量A和B。兩個變量都是互相緊挨著的。那線程a要去操作A,就會把變量A和B一起帶入的緩存行,線程b要去操作變量B,也會同時把AB帶入緩存行。此時如果線程a把A做了修改,再通過BUS總線進行了通知,內(nèi)存再做了修改。線程b重新從內(nèi)存獲取變量B,那么此時這種還需要從內(nèi)存獲取變量,這就是偽共享了。

偽共享:變量AB毫不相關(guān),但是一旦其中一個變量被修改,另一個變量也會被重新加載。

偽共享的解決方案:

  1. 使用緩存行填充,也就是說,我們在變量AB之間,加入一些無用的變量,讓AB不在同一個緩存行中,這樣就不會出現(xiàn)偽共享的問題了。

舉例:

private static class Padding{
    private volatile long a;
    public volatile long a1,a2,a3,a4,a5,a6,a7;
    private volatile long b;
  }
2.使用@Contened注解在變量上,同時在jdk8中還需要在jvm啟動參數(shù)中加入
-XX:-RestrictContended,jdk8以上的版本就不需要這個參數(shù)即可,
這樣就可以解決偽共享的問題了。
private static class Padding{
    @Contended
    private volatile long a;
    @Contended
    private volatile long b;
  }

結(jié)尾:

今天就給大家分享了一下關(guān)于CPU偽共享的問題,大家如果對CPU緩存模型那塊還有疑問,可以多查找一下資料,比如MESI緩存一致模型等等。


網(wǎng)頁標題:每天一道面試題-CPU偽共享
新聞來源:http://www.dlmjj.cn/article/dhpcsip.html