之前寫java鎖的時候有說等我看完了阿里的《碼出高效》-并發(fā)與多線程就來更新铺峭,最近忙的沒顧上的我大半夜來更新啦(純記錄纱兑,內(nèi)容全部來阿里《碼出高效》因俐,不用于盈利,侵刪)妄呕。
并發(fā)與并行
并發(fā)是指在某個時間段內(nèi)陶舞,多任務(wù)交替處理的能力。所謂不患寡而患不均绪励,每個CPU不可能只顧著執(zhí)行某個進(jìn)程肿孵,讓其他線程一直處于等待狀態(tài)。所以疏魏,CPU把可執(zhí)行的時間均勻地分成若干份停做,每個進(jìn)程執(zhí)行一段時間后,記錄當(dāng)前的工作狀態(tài)大莫,釋放相關(guān)的執(zhí)行資源并進(jìn)入等待狀態(tài)蛉腌,讓其他進(jìn)程搶占CPU資源。并行是指同時處理多任務(wù)的能力只厘,目前烙丛,CPU已經(jīng)發(fā)展為多核,可以同時執(zhí)行多個互不依賴的指令及執(zhí)行塊懈凹。并發(fā)與并行兩個概念非常容易混淆蜀变,他們的核心區(qū)別在于進(jìn)程是否同時執(zhí)行悄谐。以KTV唱歌為例介评,并行指的是有多少人可以使用話筒同時唱歌,并發(fā)指的是同一個話筒被多個人輪流使用爬舰。
并發(fā)與并行的目標(biāo)都是盡可能地執(zhí)行完所有任務(wù)们陆。以一聲坐診為例,某個科室有兩個專家同時出診情屹,這就是兩個并行任務(wù)坪仇;其中一個醫(yī)生,時而問診垃你,時而查看化驗(yàn)單椅文,然后繼續(xù)問診,突然又中斷去處理病人的咨詢惜颇,這就是并發(fā)皆刺。在并發(fā)環(huán)境下,由于程序的封閉性被打破凌摄,出現(xiàn)了一下特點(diǎn):
并發(fā)程序之間有相互制約的關(guān)系羡蛾。直接制約提現(xiàn)為一個程序需要另一個程序的計(jì)算結(jié)果;間接制約體現(xiàn)為多個程序競爭共享資源锨亏,如處理器痴怨、緩沖區(qū)等忙干。
并發(fā)程序的執(zhí)行過程是斷斷續(xù)續(xù)的。程序需要記憶現(xiàn)場指令及執(zhí)行點(diǎn)浪藻。
當(dāng)并發(fā)數(shù)設(shè)置合理并且CPU擁有足夠的處理能力時捐迫,并發(fā)會提高程序的運(yùn)行效率。