樂觀鎖與悲觀鎖總結(jié)
1027
2025-04-07
本文作為圖解java并發(fā)編程的第三篇,前2篇訪問地址如下所示:
圖解進(jìn)程線程、互斥鎖與信號(hào)量-看完還不懂你來打我
8成以上的java線程狀態(tài)圖都畫錯(cuò)了–圖解java并發(fā)第二篇
一、CPU角度的并發(fā)與并行
并發(fā)
曾經(jīng)我作為一個(gè)不是很愛學(xué)習(xí)的孩子,在上學(xué)的時(shí)候經(jīng)常做這樣的事情:在數(shù)學(xué)課上補(bǔ)物理作業(yè),數(shù)學(xué)課聽懂了,物理作業(yè)也上交了。不謙虛的說,我是具備這樣的能力,但很可惜沒用對(duì)地方。
很多同學(xué)說:“你是不是有多個(gè)大腦?”,肯定不是啊,其實(shí)這是一種切換的能力。當(dāng)你同時(shí)做多件事情,并且能夠快速切換的時(shí)候。在別人開來,你就有了并發(fā)的能力,但是你的大腦還是一個(gè)大腦。
我們的計(jì)算機(jī)在絕大部分時(shí)間都運(yùn)行很多很多的進(jìn)程與線程,所以CPU并發(fā)執(zhí)行并切換分配CPU時(shí)間片資源是一種常態(tài)。只是CPU的執(zhí)行速度實(shí)在是太快了,快到絕大部分情況下你都無法感知“執(zhí)行線程的切換”。所以看上去它在一邊播放音樂,一邊運(yùn)行瀏覽器,一邊運(yùn)行其他軟件。
并行
知道了計(jì)算機(jī)中并發(fā)的概念,我們來舉例了解一下并行的概念。
你在餐廳點(diǎn)餐,點(diǎn)餐后等餐的同時(shí)你在讀書。看上去你是在做兩件事,等餐和讀書。實(shí)際上只有一件事是需要你實(shí)際操作的,那就是讀書;另外一件事實(shí)際上是做菜,做菜是由餐廳的廚師進(jìn)行的。
隨著計(jì)算機(jī)多核CPU的普及,計(jì)算機(jī)也在一定程度上具備了并行計(jì)算的能力。那這么說,單核心的CPU就一定不存在并行能力嘍?也并非完全如此,若單核心的CPU擁有Hyper-threading技術(shù),那么單核心可以并行的運(yùn)行兩個(gè)邏輯線程。
二、線程角度的并發(fā)與并行
上面的并發(fā)與并行的解釋更多的是從CPU運(yùn)行的角度,但作為程序員更關(guān)心的是作為開發(fā)者如何區(qū)分并發(fā)與并行。
從線程的角度去談并行,通常是指在多線程間不存在數(shù)據(jù)共享或通信,能夠利用CPU的并行能力去運(yùn)行多線程。
從線程的角度去談并發(fā),通常是指多個(gè)線程之間存在資源共享(內(nèi)存、代碼段等),彼此協(xié)調(diào)共享資源的使用,從而交出或獲得CPU執(zhí)行時(shí)間片的使用權(quán)。
總結(jié)一句話,希望對(duì)你與理解并發(fā)與并行有幫助,并發(fā)是看上去的并行,實(shí)際上的資源切換,并發(fā)目的是將資源利用能力最大化、最優(yōu)化。
Java 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。