1. 程式人生 > >並行和併發,同步和非同步的區別

並行和併發,同步和非同步的區別

  老是忘記併發和並行,同步和非同步之間的區別,今天寫篇部落格,加深印象。

併發 & 並行

 併發:當有多個執行緒在操作時,如果系統只有一個CPU,則它根本不可能真正同時進行一個以上的執行緒,它只能把CPU執行時間劃分成若干個時間段,再將時間段分配給各個執行緒執行,在一個時間段的執行緒程式碼執行時,其它執行緒處於掛起狀。這種方式我們稱之為併發(Concurrent)。

並行:當系統有一個以上CPU時,則執行緒的操作有可能非併發。當一個CPU執行一個執行緒時,另一個CPU可以執行另一個執行緒,兩個執行緒互不搶佔CPU資源,可以同時進行,這種方式我們稱之為並行(Parallel)。

區別:併發和並行是即相似又有區別的兩個概念,並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔內發生。在多道程式環境下,併發性是指在一段時間內巨集觀上有多個程式在同時執行,但在單處理機系統中,每一時刻卻僅能有一道程式執行,故微觀上這些程式只能是分時地交替執行。倘若在計算機系統中有多個處理機,則這些可以併發執行的程式便可被分配到多個處理機上,實現並行執行,即利用每個處理機來處理一個可併發執行的程式,這樣,多個程式便可以同時執行。

同步 & 非同步

這裡介紹兩種情況下的同步和非同步。

在I/O模型中,“同步”和“非同步”的區別在於核心嚮應用程式通知的是何種I/O事件(是就緒事件還是完成事件),以及有誰來完成I/O讀寫(是應用程式還是核心)。

同步I/O模型要求使用者程式碼自行執行I/O操作(將資料從核心緩衝區讀入使用者緩衝區,或將資料從使用者緩衝區寫入核心緩衝區)。同步I/O嚮應用程式通知的是I/O就緒事件。

非同步I/O模型則由核心來執行I/O操作(資料在核心緩衝區和使用者緩衝區之間的移動是由核心在“後臺”完成的)。非同步I/O嚮應用程式通知的是I/O完成事件。

在併發模式中,“同步”指的是程式完全按照程式碼序列的順序執行;“非同步”指的是程式的執行需要由系統事件來驅動。常見的系統事件包括中斷、訊號等。