1. 程式人生 > >高階java高併發,高效能,分散式,高可用,負載均衡,系統架構實戰

高階java高併發,高效能,分散式,高可用,負載均衡,系統架構實戰

Java併發程式設計(一): 併發程式設計的挑戰
本文主要內容出自《Java併發程式設計的藝術》一書,是對該書內容的歸納和理解,有興趣的朋友請購買正版閱讀全部內容。

併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題,本章會介紹幾種併發程式設計的挑戰,以及解決方案。

1. 上下文切換
即使是單核處理器也支援多執行緒執行程式碼,CPU通過給每個執行緒分配CPU時間片來實現這個機制。時間片是CPU分配給各個執行緒的時間,因為時間片非常短,所以CPU通過不停的切換執行緒執行,讓我們感覺多個執行緒是同時執行的,時間片一般是幾十毫秒(ms)。

CPU通過時間片分配演算法來迴圈執行任務,當前任務執行一個時間片後會切換到下個任務,但是在切換前會儲存上一個任務的狀態,以便下次切換回這個任務時,可以再載入這個任務的狀態。所以任務的儲存到再載入的過程就是一次上下文切換。

就像我們同時在讀兩本書,比如當我們在讀一本英文的技術書時,發現某個單詞不認識,於是便開啟中英文字典,但是在放下英文技術書之前,大腦必需首先記住這本書讀到了多少頁的第多少行,等查完單詞之後,能夠繼續讀這本書,這樣的切換是會影響讀書效率的,同樣上下文切換也會影響到多執行緒的執行速度。