原创 CPU高速緩存與內存屏障

1. CPU緩存 cpu高速緩存的由來 在CPU的全部取指令週期中(程序計算),至少需要訪問一次存儲器(也就是我們所說物理內存上的數據) 通常需要多次訪問存儲器的取操作數或者保存結果,CPU處理計算的速度明顯受限於訪問存儲器的

原创 synchronized基於JVM規範的工作原理(一)

1. synchronized同步方法 synchronized同步方法的字節碼還原 java聲明的方法在jvm中的結構格式method_info method_info { u2 acc

原创 Java內存模型之可見性分析

1. JMM模型描述 給定程序以及一個檢測程序是否合法的執行跟蹤,JMM工作原理是檢查執行跟蹤中的每個讀,並根據某些規則檢查讀觀察到的寫是否有效 JMM中可能產生的行爲表象現爲不論代碼是如何實現程序行爲,只要保證程序的所有結果執行

原创 關鍵字volatile的使用與原子性問題

1. volatile的使用 java源代碼 public class VolatileUsedClass { private static int sharedVar = 10; public stati

原创 併發原子性技術之CAS機制

1. CAS機制 CAS定義 從wiki百科中,Compare-and-swap簡稱爲“CAS”,是屬於併發多線程中實現同步原子操作的指令,是依賴於硬件層次的原語發起的原子操作 從程序代碼理解上,CAS包含check then

原创 Epoll技術擴展

Epoll技術回顧 基於上一篇的epoll技術存在一些問題,對此將糾正部分要點 epoll使用技術 使用鎖的技術 讀寫鎖:內核在操作對象進行輪詢的時候加讀鎖,而通過加寫鎖爲了保證喚醒只執行一次,即在網絡socket數據報可達

原创 高性能IO設計之Reactor模型

首先,在講述高性能IO編程設計的時候,我們先思考一下何爲“高性能”呢,如果自己來設計一個web體系服務,選擇BIO還是NIO的編程方式呢?其次,我們可以瞭解下構建一個web體系服務中,爲了能夠支撐更多的併發連接數,一般會有兩種we

原创 final線程安全與工作原理

1.final語義與使用 final的語義 編譯器做的處理 編譯器可以跨同步屏障移動對final修飾的字段值進行讀取和調用任意或未知的方法 對於final與non-final修飾的字段,允許編譯器保存一份final的數據緩存

原创 併發原子性技術之加鎖方式

1. 鎖的分類 樂觀鎖與悲觀鎖 樂觀鎖:在併發環境下,一般情況認爲是屬於讀多寫少的情況,沒有數據衝突,當對共享資源發生寫操作的時候,會先檢測當前版本的數據與先前版本數據是否一致,如果不一致說明有其他線程已經發生寫操作,需要重

原创 Java內存模型之簡要知識與規範梳理

1. JMM簡要知識 語義規範 Java編程語言的語義允許編譯器和微處理器執行優化,從而與不正確同步的代碼進行交互來完成工作. 線程內語義是單線程程序的語義,它允許根據線程內讀操作看到的值來完全預測線程的行爲;由於單線程內的實

原创 Unix網絡編程之5種IO模型

1. Unix/Linux操作系統簡述 Unix操作與Linux系統結構圖解 (引用計算機操作系統書籍) 概要說明 用戶空間: 姑且將上述用戶級別或者是unix編程的應用程序的部分稱爲用戶空間,我們可以通過啓動進程來

原创 深入epoll技術原理分析

閱讀之前請先了解Linux內核的wakeup&callback機制以及前文的select與poll技術分析 epoll技術 爲了解決select&poll技術存在的兩個性能問題,對於大內存數據拷貝問題,epoll通過epoll_c

原创 MySQL性能分析命令

服務性能簡介 三個性能服務請求 如何確認服務器是否達到了性能最佳狀態 找出某條sql語句執行慢的原因 診斷被用戶描述成“停頓”,“堆積”或者是“卡死”的間歇性疑難故障. 性能定義 爲完成某件任務所需要的時間度量,換言

原创 分佈式共識問題

在講述分佈式的共識問題之前,我們先了解下什麼是拜占庭將軍問題, 其次從拜占庭將軍問題來認識什麼是分佈式共識問題,與分佈式一致性的區分在哪裏?然後推演分佈式共識問題產生的原因以及解決共識問題的策略算法有哪些,對應的適用場景有哪些?接

原创 分佈式網絡基礎

在分佈式服務化架構設計中,服務與服務之間通信均是基於網絡底層協議來實現的,於是我們需要對網絡相關基礎知識有一個基本的認知,這樣在我們服務與服務之間進行通信(跨進程通信)過程能夠在我們的腦圖形成一個基本的數據傳輸流程以及其中的細節問