一、串行、 并發(fā)和并行

1、并發(fā)是一段時(shí)間內(nèi)可以處理或者完成很多的事情。而并行是一種更加嚴(yán)格、理想的并發(fā),及并行可以看成一種特別的并發(fā)。并發(fā)往往是帶有部分串行的并發(fā),而并行就是并發(fā)的極致。
2、從軟件角度看,并發(fā)就是在一段時(shí)間內(nèi)以交替的方式去完成多個(gè)任務(wù)(一段時(shí)間內(nèi)),而并行就是以齊頭并進(jìn)的方式去完成多個(gè)任務(wù).(同一時(shí)刻)
3、從硬件角度看,在一個(gè)處理器一次只能運(yùn)行一個(gè)線程的情況下面,由于處理器可以使用時(shí)間片分配的技術(shù)實(shí)現(xiàn)在同一段時(shí)間內(nèi)運(yùn)行多個(gè)線程,因此一個(gè)處理器就可以實(shí)現(xiàn)并發(fā)。但是并行則需要多個(gè)處理器在同一個(gè)時(shí)刻各自運(yùn)行一個(gè)線程來(lái)實(shí)現(xiàn)。
多線程編程的實(shí)質(zhì)就是:將任務(wù)的處理方式由串行改為并發(fā),及實(shí)現(xiàn)并發(fā)化,以發(fā)揮并發(fā)的優(yōu)勢(shì)。
二、競(jìng)態(tài)
競(jìng)態(tài):一個(gè)計(jì)算結(jié)果的正確性與時(shí)間有關(guān)的現(xiàn)象被稱為競(jìng)態(tài)。或者說(shuō)指計(jì)算的正確性依賴于相對(duì)時(shí)間的順序或者線程的交錯(cuò)。
1、競(jìng)態(tài)產(chǎn)生原因

導(dǎo)致競(jìng)態(tài)發(fā)生的常見(jiàn)因素是:多個(gè)線程在沒(méi)有采取任何措施的情況下面并發(fā)地更新、讀取同一個(gè)共享變量。競(jìng)態(tài)往往伴隨著讀取臟數(shù)據(jù)問(wèn)題,及讀取到一個(gè)過(guò)時(shí)、丟失更新的問(wèn)題,以一個(gè)線程對(duì)數(shù)據(jù)所做的更新沒(méi)有體現(xiàn)在后續(xù)其他線程對(duì)該數(shù)據(jù)的讀取上。
2、競(jìng)態(tài)模式和競(jìng)態(tài)產(chǎn)生的條件
(1)競(jìng)態(tài)的兩種模式:
read-modify-write(讀-寫-改)
check-then-act(檢查而后行動(dòng))


(2)競(jìng)態(tài)產(chǎn)生條件


三、線程安全
線程安全:如果一個(gè)類在單線程環(huán)境下面能夠運(yùn)行正常的話,并且在多線程環(huán)境下面,使用方不必做任何改動(dòng)的情況下面也能運(yùn)行正常的話就稱其為線程安全的,相應(yīng)的這個(gè)類具有線程安全性。
非線程安全:反之,如果一個(gè)類在單線程環(huán)境下面運(yùn)作正常,而不做任何改動(dòng)在多線程環(huán)境下面無(wú)法運(yùn)作正常,那么這個(gè)類就是非線程安全的。
把一個(gè)類做成線程安全的往往是具有代價(jià)的
線程安全問(wèn)題概括為三個(gè)方面:原子性、可見(jiàn)性、有序性
四、上下文切換
1、產(chǎn)生原因



2、上下文切換分類
按照上下文切換的因素劃分,可以劃分為自發(fā)性上下文切換和非自發(fā)性上下文切換
(1)自發(fā)性上下文切換
1、Thread.sleep/yield/join
2、Object.wait等
3、線程引發(fā)io操作(如讀取文件)
4、等待其他線程持有的鎖
(2)非自發(fā)性上下文切換
非自發(fā)性上下文切換是由于線程調(diào)度器的原因beip切出。比如一個(gè)線程的時(shí)間片段用完了或者是有另一個(gè)更高優(yōu)先級(jí)的線程需要被運(yùn)行。同時(shí)在GC回收的時(shí)候也會(huì)導(dǎo)致非自發(fā)的上下文切換(因?yàn)镚C回收器在進(jìn)行垃圾回收的時(shí)候可能需要暫停所有的用戶線程,stop the world,此時(shí)會(huì)發(fā)生上下文切換)
3、上下文切換的開(kāi)銷
(1)直接開(kāi)銷

(2)間接開(kāi)銷

定量角度來(lái)說(shuō):一次線程的上下文切換是非??斓模⒚爰?jí)別。但是程序中線程非常多,而發(fā)生上下文切換是非常多的,當(dāng)數(shù)量非常多的時(shí)候,切換的開(kāi)銷就非常大
有了上下文切換,多線程編程未必比單線程編程的效率高。
4、上下文切換的監(jiān)控
五、線性活動(dòng)故障


得其所需要的資源而使得任務(wù)執(zhí)行無(wú)法進(jìn)展的現(xiàn)象。
六、資源的爭(zhēng)用與調(diào)度
1、資源爭(zhēng)用



高并發(fā)增加了資源的爭(zhēng)用概率,但是高并發(fā)未必就意味著高爭(zhēng)用
我們要達(dá)到的理想狀態(tài)就是:高并發(fā)、低爭(zhēng)用
2、資源調(diào)度




