您好,登錄后才能下訂單哦!
從本課開始學(xué)習(xí)并發(fā)編程的內(nèi)容。主要介紹并發(fā)編程的基礎(chǔ)知識、鎖、內(nèi)存模型、線程池、各種并發(fā)容器的使用。
并發(fā)編程
并發(fā)基礎(chǔ)
進(jìn)程
線程
線程通信
系統(tǒng)、包括操作系統(tǒng)的運(yùn)行是以CPU為核心的,各種數(shù)據(jù)操作都是在CPU中進(jìn)行的。所以要學(xué)習(xí)并發(fā)編程,必須要搞清楚和CPU的關(guān)系。
經(jīng)常說CPU是4核8線程的,這個的意思是4個物理核心
,每個物理核心虛擬出2個虛擬核心,也就是8個虛擬核心
。每個虛擬核心在一個時(shí)刻只能運(yùn)行一個線程。
進(jìn)程的定義:程序被載入內(nèi)存并開始準(zhǔn)備執(zhí)行,它就是一個進(jìn)程,也就是說進(jìn)程是執(zhí)行中的程序代碼。進(jìn)程是資源分配和程序調(diào)度運(yùn)行的基本單位。
線程的定義:單個進(jìn)程中執(zhí)行每個任務(wù)就是一個線程。線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位。
一個線程只能屬于一個進(jìn)程,一個進(jìn)程可以擁有多個線程。多線程處理就是允許一個進(jìn)程中在同一時(shí)刻執(zhí)行多個任務(wù)(線程)。
對比 | 進(jìn)程 | 線程 |
---|---|---|
定義 | 進(jìn)程是程序?qū)嶓w的運(yùn)行過程,是系統(tǒng)資源分配和調(diào)度運(yùn)行的基本單位 | 線程是進(jìn)程執(zhí)行任務(wù)的最小調(diào)度單位 |
系統(tǒng)開銷 | 創(chuàng)建切換開銷大,資源要重新分配和回收 | 僅保存少量寄存器的內(nèi)容,開銷小,并且在進(jìn)程的地址空間執(zhí)行代碼 |
占有資源 | 擁有分配的所有資源 | 基本不占資源,僅有其運(yùn)行不可少的資源(程序計(jì)數(shù)器、一組寄存器和棧) |
安全性 | 進(jìn)程間相互獨(dú)立 | 線程間共享進(jìn)程的資源,可以互相通信和影響 |
大多數(shù)的應(yīng)用程序?yàn)榱颂岣咂鋱?zhí)行效率,而采用多線程模式。充分利用CPU的核心來實(shí)現(xiàn)高效率運(yùn)行。那是不是最大只能同時(shí)開啟8個線程呢?如果想開啟更多線程,可以嗎?CPU內(nèi)部該如何處理呢?
對于4核8線程的CPU來說,如果只起8個線程,每個虛擬內(nèi)核都各自執(zhí)行一個線程,這是最簡單的高效率利用方式。但是在實(shí)際使用時(shí)這是不可能的。首先,計(jì)算機(jī)硬件必須有操作才能運(yùn)行,而操作系統(tǒng)啟動后在運(yùn)行過程中必不可少的要執(zhí)行各種任務(wù);其次,個人運(yùn)行的程序也是要啟動線程來執(zhí)行各種各樣的任務(wù)調(diào)度。所以,對于一臺電腦,不管是個人PC還是服務(wù)器,其真正運(yùn)行的線程肯定是多于CPU的內(nèi)核數(shù)的,那它是如何保證各個任務(wù)流暢運(yùn)行的呢?
這就是CPU的線程調(diào)度。采用一定的算法把CPU的使用權(quán)合理的分配給線程,使得任務(wù)執(zhí)行。
有兩種調(diào)度模型,分時(shí)調(diào)度
和搶占式調(diào)度
。
分時(shí)調(diào)度模型是指讓所有的線程輪流獲得CPU的使用權(quán),并且平均分配每個線程占用的CPU時(shí)間片。
搶占式調(diào)度模型是指優(yōu)先讓運(yùn)行池中優(yōu)先級最高的線程占用CPU,如果優(yōu)先級相同,則隨機(jī)選擇一個線程來占用CPU。處于運(yùn)行中狀態(tài)的線程會一直運(yùn)行,直到它不得不放棄CPU。
JVM采用搶占式調(diào)度。
一個線程會因?yàn)橐韵略蚨艞塁PU:
串行:是指多個任務(wù),一個執(zhí)行完接著一個
并行:每個核心執(zhí)行一個任務(wù),同一時(shí)刻多個任務(wù)同時(shí)執(zhí)行
并發(fā):多個任務(wù)在單核心上執(zhí)行,同一時(shí)刻只有一個任務(wù),系統(tǒng)不停的切換任務(wù),看起來像是同時(shí)執(zhí)行,實(shí)際上是不停的切換
對于計(jì)算密集型任務(wù),線程數(shù)量不宜過多,因?yàn)楸旧砣蝿?wù)就是高CPU利用率,線程多的話,會因?yàn)樯舷挛那袚Q而浪費(fèi)資源。對于IO密集型任務(wù),比如磁盤IO和網(wǎng)絡(luò)IO,因?yàn)槿蝿?wù)是低CPU利用率,所以可以適當(dāng)多開線程。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。