串行
多個任務(wù)听诸,執(zhí)行時一個執(zhí)行完再執(zhí)行另一個坐求。
比喻:吃完飯再看視頻。
并發(fā)
多個線程在單個核心運行晌梨,同一時間一個線程運行桥嗤,系統(tǒng)不停切換線程赛糟,看起來像同時運行,實際上是線程不停切換砸逊。
比喻: 一會跑去廚房吃飯璧南,一會跑去客廳看視頻。
并行
每個線程分配給獨立的核心师逸,線程同時運行司倚。
比喻:一邊吃飯一邊看視頻。
在單CPU系統(tǒng)中篓像,系統(tǒng)調(diào)度在某一時刻只能讓一個線程運行动知,雖然這種調(diào)試機制有多種形式(大多數(shù)是時間片輪巡為主),但無論如何员辩,要通過不斷切換需要運行的線程讓其運行的方式就叫并發(fā)(concurrent)盒粮。而在多CPU系統(tǒng)中,可以讓兩個以上的線程同時運行奠滑,這種可以同時讓兩個以上線程同時運行的方式叫做并行(parallel)丹皱。
并發(fā)是有狀態(tài)的,“具有可論證的確定性宋税,但是實際上具有不可確定性”摊崭;"并發(fā)"在微觀上不是同時執(zhí)行的,只是把時間分成若干段杰赛,使多個進(jìn)程快速交替的執(zhí)行呢簸,從宏觀外來看,好像是這些進(jìn)程都在執(zhí)行乏屯。使用多個線程可以幫助我們在單個處理系統(tǒng)中實現(xiàn)更高的吞吐量根时,如果一個程序是單線程的,這個處理器在等待一個同步I/O操作完成的時候辰晕,他仍然是空閑的蛤迎。在多線程系統(tǒng)中,當(dāng)一個線程等待I/O的同時伞芹,其他的線程也可以執(zhí)行忘苛。
異步與多線程異步和多線程并不是一個同等關(guān)系,異步是最終目的,多線程只是我們實現(xiàn)異步的一種手段碱蒙。異步是當(dāng)一個調(diào)用請求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回而可以做其它的事情偿警。實現(xiàn)異步可以采用多線程技術(shù)或則交給另外的進(jìn)程來處理锅风。
異步和同步的區(qū)別繁仁, 在io等待的時候鳍贾,同步不會切走呢岗,浪費了時間评汰。
多線程的好處读拆,比較容易的實現(xiàn)了 異步切換的思想汉形, 因為異步的程序很難寫的纸镊。多線程本身程還是以同步完成倍阐,但是應(yīng)該說比效率是比不上異步的。 而且多線很容易寫逗威, 相對效率也高峰搪。
多線程和異步操作兩者都可以達(dá)到避免調(diào)用線程阻塞的目的,從而提高軟件的可響應(yīng)性凯旭。甚至有些時候我們就認(rèn)為多線程和異步操作是等同的概念概耻。但是,多線程和異步操作還是有一些區(qū)別的罐呼。而這些區(qū)別造成了使用多線程和異步操作的時機的區(qū)別鞠柄。
異步操作的本質(zhì): 所有的程序最終都會由計算機硬件來執(zhí)行,所以為了更好的理解異步操作的本質(zhì)嫉柴,我們有必要了解一下它的硬件基礎(chǔ)厌杜。 熟悉電腦硬件的朋友肯定對DMA這個詞不陌生,硬盤计螺、光驅(qū)的技術(shù)規(guī)格中都有明確DMA的模式指標(biāo)夯尽,其實網(wǎng)卡、聲卡危尿、顯卡也是有DMA功能的呐萌。DMA就是直接內(nèi)存訪問的意思