溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

掌握系列之并發(fā)編程-1.并發(fā)基礎(chǔ)

發(fā)布時(shí)間:2020-06-26 17:02:06 來源:網(wǎng)絡(luò) 閱讀:420 作者:學(xué)習(xí)Lr 欄目:編程語言

掌握高并發(fā)、高可用架構(gòu)

第二課 并發(fā)編程

從本課開始學(xué)習(xí)并發(fā)編程的內(nèi)容。主要介紹并發(fā)編程的基礎(chǔ)知識、鎖、內(nèi)存模型、線程池、各種并發(fā)容器的使用。

第一節(jié) 并發(fā)基礎(chǔ)

并發(fā)編程 并發(fā)基礎(chǔ) 進(jìn)程 線程 線程通信

系統(tǒng)、包括操作系統(tǒng)的運(yùn)行是以CPU為核心的,各種數(shù)據(jù)操作都是在CPU中進(jìn)行的。所以要學(xué)習(xí)并發(fā)編程,必須要搞清楚和CPU的關(guān)系。

CPU簡介

經(jīng)常說CPU是4核8線程的,這個的意思是4個物理核心,每個物理核心虛擬出2個虛擬核心,也就是8個虛擬核心每個虛擬核心在一個時(shí)刻只能運(yùn)行一個線程。

進(jì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)程的資源,可以互相通信和影響

掌握系列之并發(fā)編程-1.并發(fā)基礎(chǔ)

CPU線程調(diào)度

大多數(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:

  1. JVM使其暫時(shí)放棄CPU,轉(zhuǎn)入就緒狀態(tài)
  2. 阻塞
  3. 執(zhí)行結(jié)束
串行、并行和并發(fā)

串行:是指多個任務(wù),一個執(zhí)行完接著一個

并行:每個核心執(zhí)行一個任務(wù),同一時(shí)刻多個任務(wù)同時(shí)執(zhí)行

并發(fā):多個任務(wù)在單核心上執(zhí)行,同一時(shí)刻只有一個任務(wù),系統(tǒng)不停的切換任務(wù),看起來像是同時(shí)執(zhí)行,實(shí)際上是不停的切換

多核下的線程數(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)多開線程。

向AI問一下細(xì)節(jié)

免責(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)容。

AI