高級java高併發,高性能,分佈式,高可用,負載均衡,系統架構實戰

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

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

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

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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章