執行緒和鎖,鎖升級
執行緒
執行緒執行的底層原理
程式是什麼? 程式是什麼? 執行緒是什麼?
- 程式: qq.exe Feiqiu.exe 這種靜靜的躺在硬碟的軟體
- 程式: 當程式載入到記憶體進行執行的就是程式資源分配的基本單位
- 執行緒: 是程式執行的基本單位
程式如何執行的? cpu讀指令存pc(程式計數器,儲存指令地址)裡,讀資料存Register,計算回寫,再下一條指令
執行緒如何進行排程的? Linux是執行緒排程器,(os)作業系統
執行緒切換的概念是什麼? Context Switch CPU儲存現場執行新執行緒,恢復現場,繼續執行原執行緒的過程
鎖的概念
-
當沒有搶到鎖的時候,會出現忙等待,自旋等待,這種鎖叫輕量級鎖
-
還有就是進入一個等待佇列,由作業系統老大來進行排程的,這種鎖叫重量級鎖
輕量級鎖的效率一定比重量級鎖的效率高嗎?
不是, 原因: 當執行緒數量太多,而持有鎖的執行緒執行久,其他等待的執行緒就進行無用的while迴圈盲目的消耗CPU資源
synchronized關鍵字
- 在jdk1.0和1.2中,直接使用的是重量級鎖
- 後面升級成了自旋鎖
自旋鎖CAS
實現方式: 比較並交換
問題: ABA問題?
描述: 就是你拿到的值去比較發現是一樣的,但是這個值可能經歷了別的執行緒修改過,又修改回原來的值,所以並不能感覺出來.
解決方法: 加一個版本號,每一次修改都要進行版本號變更
問題: CAS修改值時,的原子性問題?
C++程式碼底層使用了組合語言 單核下直接使用指令cmpxchg
比較並交換,在多核下要使用lock
指令,所有的cpu都支援這個指令
lock
指令: 鎖匯流排
Synchronized的實現原理
就是Lock
指令和comxchg
指令,因為它底層使用了輕量級鎖,這是一個升級的過程
鎖的四種狀態
無鎖(new出來的時候)–>偏向鎖 --> 輕量級鎖(CAS) -->重量級鎖
偏向鎖
沒有鎖的時候,來一個執行緒,就貼上一個自己的標籤,直接使用,
效率的提升就在不用進行判斷和競爭
當又來了一個執行緒或者多個執行緒,就把標籤撕下來,升級成輕量級鎖,開始競爭
鎖升級
- 一個執行緒偏向鎖
- 多個執行緒輕量級鎖
- 當輕量級鎖競爭耗時過長,旋轉次數過多,開始進入等待佇列,升級成重量級鎖
按塊讀取
程式區域性性原理,可以提高效率
充分發揮匯流排cpu腳針等一次性讀取更多資料的能力
快取行
快取行越大,區域性性空間效率越高,但讀取時間慢
快取行越小,區域性性空間效率越低,但讀取時間快
取一個折中值,目前多用:64位元組
快取一致性協議
cpu為了保持互相快取行之間的資料的一致性採取的一致性協議, 互相通知和修改值的操作
根據快取行的特性程式設計技巧
根據業務將資料進行分離, 讓不相關的不要在同一個快取行,避免了cpu之間的相互達到快取一致,從而提高了效率
相關文章
- 執行緒狀態和鎖執行緒
- 執行緒安全: 互斥鎖和自旋鎖(10種)執行緒
- Java多執行緒 -- 公平鎖和非公平鎖Java執行緒
- 執行緒同步及執行緒鎖執行緒
- 多執行緒_鎖執行緒
- 執行緒鎖(四)執行緒
- Python 多執行緒和鎖Python執行緒
- java 執行緒鎖物件鎖的理解Java執行緒物件
- Java多執行緒(2)執行緒鎖Java執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- 【Swift】iOS 執行緒鎖SwiftiOS執行緒
- 執行緒的互斥鎖執行緒
- Java執行緒:執行緒的同步與鎖Java執行緒
- 執行緒安全(上)--徹底搞懂synchronized(從偏向鎖到重量級鎖執行緒synchronized
- 執行緒安全(中)--徹底搞懂synchronized(從偏向鎖到重量級鎖)執行緒synchronized
- Gil全域性解釋鎖和執行緒互斥鎖的關係執行緒
- python之執行緒鎖Python執行緒
- Java 執行緒安全 與 鎖Java執行緒
- 執行緒中的死鎖執行緒
- java多執行緒–同步鎖Java執行緒
- Java多執行緒-無鎖Java執行緒
- GCD&&執行緒死鎖GC執行緒
- OC 各種執行緒鎖執行緒
- Java執行緒之鎖研究Java執行緒
- GCD 之執行緒死鎖GC執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- @Transactional 中使用執行緒鎖導致了鎖失效執行緒
- python多執行緒程式設計4: 死鎖和可重入鎖Python執行緒程式設計
- iOS開發基礎——執行緒安全(執行緒鎖)iOS執行緒
- 理解JVM(六):執行緒安全和鎖優化JVM執行緒優化
- 多執行緒-死鎖問題概述和使用執行緒
- MySQL 避免行鎖升級為表鎖——使用高效的索引MySql索引
- Java多執行緒/併發10、不可重入鎖/自旋鎖、可重入鎖Java執行緒
- 執行緒同步與互斥:互斥鎖執行緒
- Java多執行緒(五):死鎖Java執行緒
- JUC之多執行緒鎖問題執行緒
- 如何處理執行緒死鎖執行緒