国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Java并發】Java并發編程與高并發基礎概念

stackfing / 1892人閱讀

摘要:筆記來源并發編程與高并發解決方案并發基礎綜述多級緩存緩存一致性亂序執行優化內存模型規定抽象結構同步八種操作及規則并發的優勢與風險并發與高并發基本概念基本概念并發同時擁有兩個或者多個線程,如果程序在單核處理器上運行,多個線程將交替地換入或者換

筆記來源:【IMOOC】Java并發編程與高并發解決方案
并發基礎

綜述:

CPU多級緩存:緩存一致性、亂序執行優化

Java內存模型:JMM規定、抽象結構、同步八種操作及規則

Java并發的優勢與風險

并發與高并發基本概念 基本概念

并發:同時擁有兩個或者多個線程,如果程序在單核處理器上運行,多個線程將交替地換入或者換出內存,這些線程是同時“存在”的,每個線程都處于執行過程中的某個狀態,如果運行在多核處理器上,此時,程序中的每個線程都將分配到一個處理器核上,因此可以同時運行。

高并發:高并發(High Concurrency)是互聯網分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時并行處理很多請求。

并發:多個線程操作相同的資源,保證線程安全,合理使用資源

高并發:服務器能同時處理很多請求,提高程序性能

知識技能

總體架構:Spring Boot、Maven、JDK8、MySQL

基礎組件:Mybatis、Guava、Lombok、Redis、Kafka

高級組件/類:Joda-Time、Atomic包、J.U.C、AQS、ThreadLocal、RateLimiter、Hystrix、threadPool、shardbatis、curator、elastic-job...

CPU多級緩存-緩存一致性 CPU多級緩存

為什么需要CPU cache:CPU的頻率太快了,快到主存跟不上,這樣在處理器時鐘周期內,CPU常常需要等待主存,浪費資源。所以cache的出現,是為了緩解CPU和內存之間速度的不匹配問題(結構:CPU -> cache -> memory)。

CPU cache有什么意義

時間局部性:如果某個數據被訪問,那么在不久的將來它很可能被再次訪問;

空間局部性:如果某個數據被訪問,那么與它相鄰的數據很快也可能被訪問。

緩存一致性(MESI)

用于保證多個CPU cache之間緩存共享數據的一致性

MESI協議中的狀態

M: Modified 修改:指的是該緩存行只被緩存在該CPU的緩存中,并且是被修改過的,因此他與主存中的數據是不一致的,該緩存行中的數據需要在未來的某個時間點(允許其他CPU讀取主存相應中的內容之前)寫回主存,然后狀態變成E(獨享)

E:Exclusive 獨享:指的是該緩存行只被緩存在該CPU的緩存中,是未被修改過的,與主存的數據是一致的,可以在任何時刻當有其他CPU讀取該內存時,變成S(共享)狀態,當CPU修改該緩存行的內容時,變成M(被修改)的狀態

S:Share 共享:意味著該緩存行可能會被多個CPU進行緩存,并且該緩存中的數據與主存數據是一致的,當有一個CPU修改該緩存行時,其他CPU是可以被作廢的,變成I(無效的)

I:Invalid 無效:代表這個緩存是無效的,可能是有其他CPU修改了該緩存行

local read:讀本地緩存的數據

local write:將數據寫到本地緩存里面

remote read:將內(主)存中的數據讀取到緩存中來

remote write:將緩存中的數據寫會到主存里面

CPU多級緩存-亂序執行優化

處理器為提高運算速度而作出違背代碼原有順序的優化

JAVA內存模型(Java Memory Model,JMM) Java 內存模型

Heap(堆):java里的堆是一個運行時的數據區,堆是由垃圾回收來負責的,堆的優勢是可以動態的分配內存大小,生存期也不必事先告訴編譯器,因為他是在運行時動態分配內存的,java的垃圾回收器會定時收走不用的數據,缺點是由于要在運行時動態分配,所以存取速度可能會慢一些。

Stack(棧):棧的優勢是存取速度比堆要快,僅次于計算機里的寄存器,棧的數據是可以共享的,缺點是存在棧中的數據的大小與生存期必須是確定的,缺乏一些靈活性。棧中主要存放一些基本類型的變量,比如 int,short,long,byte,double,float,boolean,char,對象句柄。

java內存模型要求調用棧和本地內存變量存放在線程棧(Thread Stack)上,對象存放在堆上。一個本地變量可能存放一個對象的引用,這時引用變量存放在本地棧上,但是對象本身存放在堆上,成員變量跟隨著對象存放在堆上,而不管是原始類型還是引用類型,靜態成員變量跟隨著類的定義一起存在在堆上。存在堆上的對象,可以被持有這個對象的引用的線程訪問。如果兩個線程同時訪問同一個對象的私有變量,這時他們獲得的是這個對象的私有拷貝。
計算機硬件架構

JVM 與硬件內存架構的關聯

Java內存模型抽象結構

Java內存模型-同步八種操作

lock(鎖定):作用于主內存的變量,把一個變量標識為一條線程獨占狀態

unlock(解鎖):作用于主內存的變量,把一個處于鎖定狀態的變量釋放出來,釋放后的變量才可以被其他線程鎖定

read(讀取):作用于主內存的變量,把一個變量值從主內存傳輸到線程的工作內存中,以便隨后的load動作使用

load(載入):作用于工作內存的變量,它把read操作從內存中得到的變量值放入工作內存的變量副本中

use(使用):作用于工作內存的變量,把工作內存中的一個變量值傳遞給執行引擎

assign(賦值):作用于工作內存的變量,它把一個從執行引擎接收到的值賦值給工作內存的變量

store(存儲):作用于工作內存的變量,把工作內存中的一個變量的值傳送到主內存中,以便隨后的write的操作

write(寫入):作用于主內存的變量,它把store操作從工作內存中的一個變量的值傳送到主內存的變量中

Java內存模型-同步規則

如果要把一個變量從主內存中復制到工作內存,就需要按順序地執行read和load操作,如果把變量從工作內存中同步回主內存中,就要按順序地執行store和write操作。但Java內存模型只要求上述操作必須按順序執行,而沒有保證必須是連續執行

不允許read和load、store和write操作之一多帶帶出現

不允許一個線程丟棄它的最近assign操作,即變量在工作內存中改變了之后必須同步到主內存中

不允許一個線程無原因地(沒有發生過任何assign操作)把數據從工作內存同步回主內存中

一個新的變量只能再主內存中誕生,不允許在工作內存中直接使用一個未被初始化(load或assign)的變量。即就是對一個變量實施use和store操作之前,必須先執行過了assign和load操作

一個變量在同一時刻只允許一條線程對其進行lock操作,但lock操作可以被同一條線程重復執行多次,多次執行lock后,只有執行相同次數的unlock操作,變量才會被解鎖。lock和unlock必須成對出現

如果對一個變量執行lock操作,將會清空工作內存中此變量的值,在執行引擎使用這個變量前需要重新執行load或assign操作初始化變量的值

如果一個變量事先沒有被lock操作鎖定,則不允許對它執行unlock操作;也不允許去unlock一個被其他線程鎖定的變量

對一個變量執行unlock操作之前,必須先把此變量同步到主內存中(執行store和write操作)

Java內存模型-同步操作與規則

并發的優勢與風險

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68996.html

相關文章

  • 長文慎入-探索Java并發編程與高并發解決方案

    摘要:所有示例代碼請見下載于基本概念并發同時擁有兩個或者多個線程,如果程序在單核處理器上運行多個線程將交替地換入或者換出內存這些線程是同時存在的,每個線程都處于執行過程中的某個狀態,如果運行在多核處理器上此時,程序中的每個線程都 所有示例代碼,請見/下載于 https://github.com/Wasabi1234... showImg(https://upload-images.jians...

    SimpleTriangle 評論0 收藏0
  • 做IT這幾年,我整理了這些干貨想要送給你!

    摘要:資源獲取方式根據下面的索引,大家可以選擇自己需要的資源,然后在松哥公眾號牧碼小子后臺回復對應的口令,就可以獲取到資源的百度云盤下載地址。公眾號二維碼如下另外本文會定期更新,松哥有新資源的時候會及時分享給大家,歡迎各位小伙伴保持關注。 沒有一條路是容易的,特別是轉行計算機這條路。 松哥接觸過很多轉行做開發的小伙伴,我了解到很多轉行人的不容易,記得松哥大二時剛剛決定轉行計算機,完全不知道這...

    王晗 評論0 收藏0
  • 馬士兵MCA架構師Java互聯網架構師

    摘要:如果是這樣,你一定要拿出個小時的時間,參加一次馬士兵老師的多線程與高并發訓練營。橫掃一切關于多線程的問題,吊打所有敢于提問并發問題的面試官。 如果你平時只有CRUD的經驗,從來不會了解多線程與高并發,相信你一定一頭霧水。如果是這樣,你一定要拿出4個小時的時間,參加一次馬士兵老師的《多線程與高并發》訓練營。讓骨灰級掃地神僧馬...

    dantezhao 評論0 收藏0
  • 多線程編程完全指南

    摘要:在這個范圍廣大的并發技術領域當中多線程編程可以說是基礎和核心,大多數抽象并發問題的構思與解決都是基于多線程模型來進行的。一般來說,多線程程序會面臨三類問題正確性問題效率問題死鎖問題。 多線程編程或者說范圍更大的并發編程是一種非常復雜且容易出錯的編程方式,但是我們為什么還要冒著風險艱辛地學習各種多線程編程技術、解決各種并發問題呢? 因為并發是整個分布式集群的基礎,通過分布式集群不僅可以大...

    mengera88 評論0 收藏0
  • Java并發】線程安全性

    摘要:另一個是使用鎖的機制來處理線程之間的原子性。依賴于去實現鎖,因此在這個關鍵字作用對象的作用范圍內,都是同一時刻只能有一個線程對其進行操作的。 線程安全性 定義:當多個線程訪問某個類時,不管運行時環境采用何種調度方式或者這些線程將如何交替執行,并且在主調代碼中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那么就稱這個類是線程安全的。 線程安全性主要體現在三個方面:原子性、可見性...

    劉玉平 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<