国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

什么是多線程環(huán)境下的偽共享(false sharing)?

這篇具有很好參考價值的文章主要介紹了什么是多線程環(huán)境下的偽共享(false sharing)?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在Java中,偽共享(false sharing)是指多線程環(huán)境下,由于緩存一致性協(xié)議的影響,不同線程訪問同一緩存行中的不同數(shù)據(jù)造成的性能下降現(xiàn)象。當(dāng)多個線程同時訪問不同變量,但這些變量存儲在同一緩存行中時,每個線程只修改自己的變量,但由于緩存一致性協(xié)議的要求,需要將整個緩存行的數(shù)據(jù)進行更新,導(dǎo)致其他線程緩存的數(shù)據(jù)失效,從而影響了性能。

接下里筆者用一段簡單的Java代碼,來演示下偽共享的效果:

public class FalseSharingDemo implements Runnable {
    private static final int NUM_THREADS = 2;
    private static final long ITERATIONS = 500000000L;
    private static final int ARRAY_SIZE = 8;

    private static VolatileLong[] longs = new VolatileLong[ARRAY_SIZE];

    static {
        for (int i = 0; i < ARRAY_SIZE; i++) {
            longs[i] = new VolatileLong();
        }
    }

    private final int arrayIndex;

    public FalseSharingDemo(int arrayIndex) {
        this.arrayIndex = arrayIndex;
    }

    public static void main(String[] args) throws InterruptedException {
        Thread[] threads = new Thread[NUM_THREADS];

        for (int i = 0; i < NUM_THREADS; i++) {
            threads[i] = new Thread(new FalseSharingDemo(i));
        }

        for (Thread t : threads) {
            t.start();
        }

        for (Thread t : threads) {
            t.join();
        }
    }

    public void run() {
        long i = ITERATIONS + 1;
        while (--i > 0) {
            longs[arrayIndex].value = i;
        }
    }

    public static class VolatileLong {
        public volatile long value = 0L;
    }
}

在上面的示例代碼中,我們創(chuàng)建了一個包含多個VolatileLong對象的數(shù)組。每個VolatileLong對象都包含一個volatile修飾的long類型的變量。在run()方法中,每個線程都會通過循環(huán)將自己的索引對應(yīng)的VolatileLong對象的value字段設(shè)置為遞減的值。

當(dāng)我們運行該示例代碼時,由于VolatileLong對象存儲在同一緩存行中,不同線程對不同的VolatileLong對象進行操作,但由于緩存一致性協(xié)議的要求,每次寫操作都會導(dǎo)致整個緩存行的數(shù)據(jù)失效。這將引起多個線程之間頻繁的緩存行無效和更新,導(dǎo)致性能下降。

為了解決偽共享問題,可以使用填充(padding)技術(shù)來確保不同變量在不同的緩存行中,從而避免了不必要的緩存行無效和更新。可以通過在VolatileLong類中增加填充字段來解決偽共享問題,例如:

public static class VolatileLong {
    public volatile long value = 0L;
    public long padding1, padding2, padding3, padding4, padding5, padding6;
}

通過在VolatileLong類中添加填充字段,可以將不同的VolatileLong對象分散到不同的緩存行中,從而避免了偽共享帶來的性能下降。文章來源地址http://www.zghlxwxcb.cn/news/detail-691536.html

到了這里,關(guān)于什么是多線程環(huán)境下的偽共享(false sharing)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Springboot】什么是多環(huán)境開發(fā)?

    那什么是多環(huán)境開發(fā)?就是針對不同的環(huán)境設(shè)置不同的配置屬性即可。比如你自己開發(fā)時,配置你的端口如下: 如何想設(shè)計兩組環(huán)境呢?中間使用三個減號分隔開 如何區(qū)分兩種環(huán)境呢?起名字唄 在idea的配置文件中配置了這三個環(huán)境,下面的Document會顯示1or2or3/3 那用哪一個呢

    2024年02月10日
    瀏覽(17)
  • JAVA中的偽共享與緩存行

    JAVA中的偽共享與緩存行

    1.CPU緩存架構(gòu) CPU 是計算機的心臟,所有運算和程序最終都要由它來執(zhí)行。 主內(nèi)存(RAM)是數(shù)據(jù)存放的地方,CPU 和主內(nèi)存之間有好幾級緩存,因為即使直接訪問主內(nèi)存也是非常慢的。 CPU的速度要遠遠大于內(nèi)存的速度,為了解決這個問題,CPU引入了三級緩存:L1,L2和L3三個級別

    2024年02月12日
    瀏覽(22)
  • Redis到底是多線程還是單線程?

    ????????Redis 是非常的快的!Redis 是基于內(nèi)存操作,CPU 不是 Redis 性能瓶頸,內(nèi)存和網(wǎng)絡(luò)帶寬(因為 IO 時需要使用)才是 Redis 的性能瓶頸。 Redis 為什么不使用多線程? ? ? ? ? 因為在多線程的情況下,CPU會在多個線程之間切換 (上下文切換) 是需要耗時的,大概為 15

    2024年02月01日
    瀏覽(20)
  • 有關(guān)多線程環(huán)境下的Volatile、lock、Interlocked和Synchronized們

    有關(guān)多線程環(huán)境下的Volatile、lock、Interlocked和Synchronized們

    ??歡迎點贊 :?? 收藏 ?留言 ?? 如有錯誤敬請指正,賜人玫瑰,手留余香! ??本文作者:由webmote 原創(chuàng) ??作者格言:新的征程,我們面對的不僅僅是技術(shù)還有人心,人心不可測,海水不可量,唯有技術(shù),才是深沉黑夜中的一座閃爍的燈塔 ! 多線程下的變量訪問,就如同

    2024年02月08日
    瀏覽(46)
  • 什么是多播

    我就問了幾下chatGPT他就給我生成了一篇文章,看著還有理有據(jù) 多播(Multicast)是一種網(wǎng)絡(luò)通信方式,可以將數(shù)據(jù)傳輸?shù)揭唤M特定的接收者。與單播(Unicast)和廣播(Broadcast)不同,多播只向特定的一組接收者發(fā)送數(shù)據(jù),而不是向所有的接收者發(fā)送數(shù)據(jù)。多播通常用于視頻會

    2024年02月12日
    瀏覽(23)
  • 【Redis】-使用Lua腳本解決多線程下的超賣問題以及為什么?

    【Redis】-使用Lua腳本解決多線程下的超賣問題以及為什么?

    一.多線程下引起的超賣問題呈現(xiàn) 1.1.我先初始化庫存數(shù)量為1、訂單數(shù)量為0 1.2.然后我開啟3個線程去執(zhí)行業(yè)務(wù) 業(yè)務(wù)為:判斷如果說庫存數(shù)量大于0,則庫存減1,訂單數(shù)量加1 結(jié)果為:庫存為-2,訂單數(shù)量為3 原因:如下圖所示,這是因為分別有6個指令(3個庫存減1指令,3個訂單

    2024年02月03日
    瀏覽(24)
  • 什么是多接入邊緣計算?(多接入邊緣計算是什么意思?)

    什么是多接入邊緣計算?(多接入邊緣計算是什么意思?)

    多接入邊緣計算?(MEC) 將流量和服務(wù)計算從集中式云遷移至網(wǎng)絡(luò)邊緣,更貼近客戶。網(wǎng)絡(luò)邊緣分析、處理并存儲所有數(shù)據(jù),而不是將其發(fā)送至云端進行處理。更貼近客戶收集并處理數(shù)據(jù)可減少延遲,為高帶寬應(yīng)用提供實時性能。 MEC特征有什么: 相近性 超低延遲 高帶寬 虛擬化

    2024年02月13日
    瀏覽(18)
  • 機器學(xué)習(xí)筆記 - 什么是多模態(tài)深度學(xué)習(xí)?

    ????????人類使用五種感官來體驗和解釋周圍的世界。我們的五種感官從五種不同的來源和五種不同的方式捕獲信息。模態(tài)是指某事發(fā)生、經(jīng)歷或捕捉的方式。 ????????人工智能正在尋求模仿人類大腦,終究是跳不出這具軀殼的限制。 ????????人腦由可以同時處理

    2024年02月09日
    瀏覽(25)
  • Web3知識科普:什么是多簽錢包?

    我們?nèi)粘J褂玫腍D(身份)錢包或多鏈錢包,通常只可以通過一個公鑰進行存儲。這意味著,無論是誰,只要獲悉了與該公鑰匹配的私鑰,就能夠支配該公鑰鏈上所持有的資產(chǎn)。所以為了解決密鑰的問題,多重簽名技術(shù)應(yīng)運而生。 今天我們就來講講多重簽名機制的含義、作用

    2024年02月11日
    瀏覽(30)
  • 秘密共享(Secret Sharing,SS)

    秘密共享(Secret Sharing,SS)

    ????秘密共享是一種重要密碼學(xué)工具用于構(gòu)建安全多方計算,其在諸多多方安全計算協(xié)議中被使用,例如拜占庭協(xié)議、多方隱私集合求交協(xié)議、閾值密碼學(xué)等。 本文首先介紹秘密共享的概念,其次介紹秘密共享生成(基于不同的生成方式我們將其劃分為基于位運算的加性秘密

    2024年02月02日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包