国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java中volatile防止指令重排

瀏覽:15日期:2023-02-10 11:24:20
目錄什么是指令重排?為什么指令重排能夠提高性能volatile是怎么禁止指令重排的?

volatile可以防止指令重排,在多線程環境下有時候我們需要使用volatile來防止指令重排,來保證代碼運行后數據的準確性

什么是指令重排?

計算機在執行程序時,為了提高性能,編譯器和處理器一般會進行指令重排,一般分為以下三種:

Java中volatile防止指令重排

指令重排有以下三個特點:

1.單線程環境下指令重排后可以保證與順序執行指令的結果一致(就是不進行指令重排的情況)

//原來的執行順序a=1;b=0;//進行指令重排后執行b=0;a=1;

這兩個順序執行的指令結果都是a=1,b=0

2.進行指令重排的時候要考慮指令之間的數據依賴性(某個指令的數據需要根據另一個指令的數據獲得)

//原來的執行順序a=0; //指令1a=10; //指令2b=a+1; //指令3//進行指令重排后a=0;b=a+1; a=10;

此時兩種順序輸出的結果就不一樣了,這是因為指令3的數據依賴于指令2,單線程環境下指令重排不會出現這種情況。

3.多線程環境下,多個線程交替執行,由于編譯器會進行指令重排,結果無法預測。

為什么指令重排能夠提高性能

串行的代碼確實會按代碼語意正確的執行(就是編寫的代碼的運行邏輯),但是編譯器對于代碼本身的優化卻并不一定會按實際的代碼一步一步的執行,就比如下面這段代碼

public void process() { int a = 10; #指令1 int b = 20; #指令2}

代碼的執行過程一定是是int a=10然后int b=20,但是代碼轉換成計算機可以識別的指令可能是指令2,指令1。

我們知道指令的執行可以分為這幾步:

取址 IF 譯碼和取寄存器操作數 ID 執行或者有效地址計算 EX (ALU邏輯計算單元) 存儲器訪問 MEM 寫回 WB (寄存器)

一段代碼并不是由單條指令就可以執行完畢的,而是通過流水線技術來執行多條指令。

流水線技術是一種將指令分解為多步,并讓不同指令的各步操作重疊,從而實現幾條指令并行處理,這樣就提高了指令的執行速度

簡單來說就是通過指令重排,可以使用流水線技術實現指令的細分,然后實現幾條指令的并行處理,從而提高速度

volatile是怎么禁止指令重排的?

這就涉及到一個概念內存屏障(內存柵欄),它是一個cpu指令,有兩個作用:

保證某些特定操作的執行順序 保證某些變量的內存可見性(實現了volatile保證可見性)

編譯器和處理器都可以進行指令重排,那么如果我們在程序中插入一條Memery Barrier(內存屏障),那么就會告訴編譯器和cpu不能對這條指令進行重排,也就是說通過插入內存屏障,使屏障前后的指令不會進行重排優化,內存屏障還可以強制刷出cpu的緩存,因此cpu上的線程都能讀到這些數據的最新版本。

簡單來說就是插入內存屏障后告訴cpu和編譯器,這個內存屏障前后的指令你不要給我進行重排序

內存屏障分為四種:

StoreStore屏障、StoreLoad屏障、LoadLoad屏障、LoadStore屏障。

Load相當于讀屏障 Store相當于寫屏障

到此這篇關于Java中volatile防止指令重排 的文章就介紹到這了,更多相關Java volatile防止指令重排 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 成年人黄视频在线观看 | 一本色道久久88加勒比—综合 | 欧美极品第1页专区 | 欧美深夜影院 | 91久久亚洲精品国产一区二区 | 国产精品黄 | 91色老99久久九九爱精品 | 亚洲成人免费在线 | 91综合精品网站久久 | 日本韩国一区二区三区 | 欧美在线香蕉在线现视频 | 欧美大片一区二区三区 | 免费人成在线观看网站 | 欧美特级一级毛片 | 99在线精品免费视频 | 国产日本韩国不卡在线视频 | 国产精品短视频免费观看 | 伊人色综合久久成人 | 全部免费国产潢色一级 | 88精品视频| 91看片淫黄大片.在线天堂 | 黄色福利站 | 国外精品视频在线观看免费 | 永久免费精品视频 | 色综合久久久高清综合久久久 | 国产国语对白一级毛片 | 久久精品免费观看久久 | 欧美日韩精品在线视频 | 欧洲成人在线视频 | 久久精品国内偷自一区 | 一级做a爰片性色毛片视频图片 | 亚洲制服欧美自拍另类 | 亚洲日本一区二区三区在线 | 色内内免费视频播放 | 成人国产网站v片免费观看 成人国产午夜在线视频 | 免费一级成人免费观看 | 天天躁日日躁狠狠躁一级毛片 | 久久久久久毛片免费播放 | 亚洲一区日韩一区欧美一区a | 伊人色在线观看 | 国产日韩在线看 |