原创 進程與線程的比較真的有必要嗎

在沒有線程的時代,一個進程內的所有動作就只能依次執行,如果有併發執行需求,就得用多進程,既然多進程可以搞定,爲啥操作系統又引入了線程呢?大家都知道,因爲線程更輕量,那線程到底輕在哪裏? 我們前面說過,進程開啓後,操作系統會爲其維護一個進程

原创 關於netty的@Sharable註解含義,你可bie瞎說了

@Sharable的真實含義 1.當netty嘗試往多個channel的pipeline中添加同一個ChannelHandlerAdapter實例時,會判斷該實例類是否添加了@Sharable,沒有則拋出... is not a @Sha

原创 lock是如何實現的,憑啥你lock後我就得等

多線程併發訪問共享資源的現象稱爲Race condition(競態條件),由於無法確定CPU調度指令的順序,當出現競態條件時,就會存在結果的不確定性(就是我們常說的併發安全問題),以及不可重現性的情況(安全問題也是偶發的,往往不容易復現,

原创 光有lock可不夠,信號量與管程原理

實際場景中,光有鎖和互斥是不夠的,還需要一些複雜的同步機制,比如讀寫鎖(多個讀操作可以同時進行),比如生產者消費者模型(生產者消費者需要你等我我等你,你喚醒我,我喚醒你,這樣的同步協調),在這種情況下,我們只使用鎖機制就不夠了,需要更高層

原创 深入理解上下文切換

對於CPU來說,它只知道取指令,執行指令,然後執行下一條指令,他可不關心當前執行的指令是從哪個進程/線程來的,這是上面的操作系統需要關心的。由於程序總歸免不了讀寫內存,讀寫磁盤,或者網絡交互,這些動作比CPU的速度慢了很多個數量級,爲了不

原创 java與C/C++的比較

跨平臺: 程序是否可以跨平臺執行應該算是java和C這種編譯型語言最大的一個區別了 編譯型語言,我們拿C語言舉例,其從源程序到被CPU執行,詳細流程是這樣的 從C源代碼,到最下面的可執行代碼,經歷了編譯器+彙編器+鏈接器,這個過程是很複

原创 隔離級別與mvcc的那些事

數據庫的四種隔離級別中,最常用的是read committed(rc)讀已提交和repeatable read(rr)兩種 在mysql中,上述兩種隔離級別都依賴於多版本併發控制機制mvcc,本文闡述mysql通過mvcc實現rc/rr兩

原创 rocketMq是如何使用netty的,透過rocketMq探究netty源碼以及netty的通用生產實踐原則

作爲一款網絡編程框架,很多時候,netty的生產使用具有較高的相似性,參考一款成熟的產品如何使用netty進行網絡通訊,無疑會加深我們對netty的理解,幫助我們更好的將netty應用於生產實踐,本文就跟大家一起分析下RocketMq中是

原创 netty源碼分析_帶你搞懂ChannelHandler事件傳播順序

明確關鍵點: 要搞懂事件在多個ChannelHandler間的傳播順序,有兩個關鍵點需要明確 1.pipeline初始化時,會創建兩個哨兵Handler,即HeadContext、TailContext,head在頭,tail在尾,我們

原创 談談java中的異常處理規範

java中的異常分爲兩大塊,分別是error,checkedException,uncheckedException 三者設計理念不一樣,體現了java設計者對不同異常情況的分類 error表示發生了意料之外的錯誤,大部分情況下,會使得程

原创 Dubbo SPI,ExtensionLoader之getExtension和getAdaptiveExtension的區別與聯繫

在dubbo中,大量的使用了ExtensionLoader進行接口實現類的擴展,也就是SPI機制,ExtensionLoader會掃描classpath下與擴展接口全路徑名一致的配置文件,如下   文件中配置的都是擴展接口的實現類,調用

原创 rocketMq事務消息原理與二階段提交

大家日常使用事務的場景,基本上都是在操作數據庫時,我們都知道,事務具有ACID的特性,可以爲數據的可靠性提供保證 但在分佈式場景中,不同系統使用不同的庫,當一個請求涉及到多個系統數據變更時,單靠數據庫事務就無法保證數據的可靠了,這就需要另

原创 線程安全、樂觀鎖和悲觀鎖那點事

線程安全的方案:保證線程安全無非就三種方式 1.悲觀鎖同步,多線程挨個訪問共享數據; 2.樂觀鎖控制+重試機制確保在更新數據時預期值和實際值一致,不一致則執行重試; 3.無鎖方式,有些場景比較適合採用無鎖方案,每個線程持有一份數據副本,互

原创 rocketMq原理_客戶端與namesrv及broker的交互

對於rocketMq客戶端來說,無非就兩個任務,消息生產與消息消費        對於生產者來說,需要知道消息可以往哪裏發送        對於消費者來說,需要知道可以從哪裏拉取消息 本文會從客戶端與namesrv、broker的交互的角

原创 消息拉取長輪詢,rocketMq是怎麼玩的

在服務端客戶端架構中,如果客戶端對服務端的某些信息變動事件感興趣,當服務端的這些信息變動後,客戶端如何即時獲取到這些信息?簡單來說,服務器端如何即時地將數據的更新或變化反應到客戶端?這是我們今天要討論的問題 其實說白了,服務端有信息變化,