同步、異步、堵塞、非堵塞概念總結

同步、異步、堵塞、非堵塞對於程序員來講都不會陌生,不管是看相關書籍,仍是面試,都會涉及到這四個詞,下面給出個人理解,若有不對請多指教。程序員

同步與異步

服務(Service)被分割成多個任務(Task),服務的執行結果是否要求任務最終按順序執行。服務的結果依賴全部任務的執行稱爲同步服務;服務的結果不依賴全部的任務稱爲異步服務。下面舉例說明:面試

  • 同步

服務(Service)開始被分割爲TaskA,TaskB,TaskC三個任務,TaskB的執行依賴於TaskA的執行,服務最後結果依賴於TaskB、TaskC,全部任務對業務來講都是同步操做。(這裏也能夠把TaskA、TaskB理解成一個任務,固然啦能夠把TaskA、TaskB、TaskC理解成一個任務。咱們平時寫的比較多的就是同步代碼)異步

  • 異步

服務(Service)開始被分割爲TaskA,TaskB,TaskC三個任務,TaskB的執行依賴於TaskA的執行,業務最後結果依賴於TaskB,TaskC的執行結果或者說TaskC中涉及到的數據對服務來講不重要甚至是不須要,因此TaskC任務對於業務來講是一個異步操做,也能夠說是一個異步服務。spa

阻塞和非阻塞

若是說線程是程序工做的基本單位、服務是要處理的內容,那麼阻塞是指工做線程須要等待服務的響應結果纔會處理下一個服務,不然工做線程會一直處於等待狀態。非阻塞是指工做線程不需等待結果直接處理下一個服務。線程

  • 阻塞

服務的執行在Handler結果返回以前,工做線程會一直等待。3d

  • 非阻塞

服務的執行不依賴Handler返回結果,工做線程直接處理下一個服務。blog

總結

  • 同步:服務依賴任務的執行結果
  • 異步:服務不依賴任務的執行結果
  • 阻塞:服務執行時線程會出現等待狀態
  • 非阻塞:不服務執行時線程不會出現等待狀態
相關文章
相關標籤/搜索