並行、併發、同步、異步、阻塞、非阻塞

本身的不肯定性理解:併發

(同步:某個線程調用一直等待系統調用結果返回,纔會執行)異步

(異步:某個線程調用沒有等待系統調用結果返回,就直接執行)socket

(阻塞:)函數

(非阻塞:)線程

並行:多個CPU核心,不一樣的程序就分配給不一樣的CPU來運行。可讓多個程序同時執行。回調函數

併發:單個CPU核心,在一個時間切片裏一次只能運行一個程序,若是須要運行多個程序,則串行執行。同步

同步與阻塞,異步與非阻塞的區別:
  同步與異步是對應的,它們是線程之間的關係,兩個線程之間要麼是同步的,要麼是異步的。
  阻塞與非阻塞是對同一個線程來講的,在某個時刻,線程要麼處於阻塞,要麼處於非阻塞。
  阻塞是使用同步機制的結果,非阻塞則是使用異步機制的結果。it

1、概念效率

1.     同步:調用時,在沒有獲得結果以前,該調用就不返回,按照這個定義,絕大多數函數都是同步調用。通常而言,咱們在說同步、異步的時候,特指那些須要其餘部件協做或者須要必定時間完成的任務。
最多見的例子就是 SendMessage。
2.     異步:調用者不會馬上獲得結果,調用發出後,經過狀態(效率低)、通知,或回調函數來通知調用者。PostMessgae。
3.     同步異步的區別:如何通知調用者獲得調用結果,同步等待調用完成,異步經過狀態、通知,或回調函數。
4.     阻塞:調用結果返回以前,當前線程會被掛起。socket的read/write/recv
5.     同步與阻塞的區別:同步當前線程仍是激活的,只是從邏輯上當前函數沒有返回而已。
6.     非阻塞:不能馬上獲得結果以前,該函數不會阻塞當前線程,而會馬上返回。
7.     異步與非阻塞的區別:非阻塞是馬上返回調用結果,異步不會馬上返回調用結果,而是經過狀態,通知,回調。
8.     異步與阻塞的關係:異步也會調用阻塞的函數,好比用select 函數,當select 返回可讀時再去read 通常都不會被阻塞,可是read是一個阻塞的函數。
9.     同步異步和阻塞非阻塞之間的區別:同步異步是如何通知的概念,阻塞和非阻塞是如何執行的概念。
2、        同步/異步與阻塞/非阻塞的組合分析
同步阻塞形式: 等待執行結果是一直等待,執行時線程掛起(未對fd 設置O_NONBLOCK 標誌位的read/write 操做)
同步非阻塞形式:等待執行結果是一直等待,執行時函數當即返回(對fd 設置O_NONBLOCK 標誌位的read/write 操做)
異步阻塞形式:不是在處理消息時一直等待(經過狀態、通知,或回調函數通知主調函數select ),而是在等待消息被觸發時被阻塞(線程掛起).若是select 函數,的最後一個timeout 參數爲NULL,程序就會中止在select這裏。
異步非阻塞形式:在處理消息是不等待,在執行消息是也不等待。select

相關文章
相關標籤/搜索