同步模型與異步模型的區別(轉)

1. 若是作一件事情是有順序的,先作完Task1,再作Task2,最後作Task3,這類事情也是咱們平常見的最多的一種狀況,以下圖所示: linux

 

    2. 若是作一件事情並無順序之分,能夠同時進行,每一件事情也是相對獨立的,其實這就是一種同步模型。固然,其實這也是一種理想狀況,在大多數狀況下,進程之間或線程之間每每要進行通訊,一個任務會等待另一個任務的返回結果,這就有些較爲複雜了,以下圖所示: 多線程

 

    3. 在異步模型中,任務是交替運行的,但仍然在一個進程中,其中每一個任務的運行狀態都是能夠被咱們控制的,以下圖所示: 異步

    異步模型與同步模型有什麼區別嗎? 學習

    a) 同步模型中的任務交替運行,是須要多個線程協同完成的,受到程序的控制,而在異步模型中則不須要。 操作系統

    b) 多線程自己就受到操做系統的調度與管理,因此同步模型自己就受到操做系統控制的,而在異步模型中一個任務會一直運行下去,直到任務被運行完或者程序暫停這個任務而去執行令一個任務。 線程

    異步模型有什麼特色,爲何要深刻了解並學習呢? 設計

    異步模型比同步模型簡單,由於異步模型只有一個進程並且任務的中止和運行狀態是可控的。而在同步模型中,咱們須要把每個任務分紅不少步驟,而後再有序的把他們組合起來。若是一個任務用到了令一個任務的結果,這個任務須要接受另外一個任務的輸出作爲他本身的輸入,並且這種接收的數據常常是一段一段的而不是一個總體。 進程

    異步模型與同步模型都是一個線程的話,他們執行相同的任務應該花費相同的時間,甚至比同步模型花費的時間更多,爲何要才採用異步的模型呢? get

    若是程序中會有阻塞、被強迫等待等狀況,異步模型會比同步模型運行速度快,同步模型在有阻塞的時候的執行過程以下圖所示: 同步

     圖中灰色的部分表明阻塞(等待),其中阻塞的緣由不少時候是因爲I/O操做,這樣的一個同步程序被稱爲「阻塞程序」。異步程序設計的原理就是當其中一個任務被阻塞的時候,能夠先去執行一些其餘能夠執行的任務因此一個異步程序也會被叫作「無阻塞程序」。

    那何時,咱們須要考慮使用異步模型呢?

    a) 有不少任務,常常總有一個任務能夠繼續執行

    b) 這些任務中要執行不少I/O操做

    c) 這些任務大多都是獨立的

    這些優點,很是適合一個很是繁忙的Web Server,每個任務表明了一次接收請求和發送結果,而這些Client 請求大多都是獨立的,因此一個Web Server的實現一個很好的異步模型的實現

相關文章
相關標籤/搜索