解釋什么是異步非阻塞?


在IO和網絡編程中,我們經常看到幾個概念:同步、異步、阻塞、非阻塞。

同步和異步

  同步和異步是針對應用程序和內核的交互而言的,同步指的是用戶進程觸發IO 操作並等待或者輪詢的去查看IO 操作是否就緒,而異步是指用戶進程觸發IO 操作以后便開始做自己的事情,而當IO 操作已經完成的時候會得到IO 完成的通知。

阻塞和非阻塞

  阻塞和非阻塞是針對於進程在訪問數據的時候,根據IO操作的就緒狀態來采取的不同方式,說白了是一種讀取或者寫入操作方法的實現方式,阻塞方式下讀取或者寫入函數將一直等待,而非阻塞方式下,讀取或者寫入方法會立即返回一個狀態值。

 

理解方式

  乍一看這四個概念的解釋會瞬間感到頭大,也經常講同步異步等同於阻塞非阻塞,其實,區分他們非常簡單。

  同步異步與阻塞非阻塞的主要區別是針對對象不同。

 

  同步異步是針對調用者來說的,調用者發起一個請求后,一直干等被調用者的反饋就是同步,不必等去做別的事就是異步。

  阻塞非阻塞是針對被調用者來說的,被調用者收到一個請求后,做完請求任務后才給出反饋就是阻塞,收到請求直接給出反饋再去做任務就是非阻塞。

 

在公交站等公交

  對調用者-乘客而言:

  1,一直干望着公交來的方向,就是同步。

  2,不望着公交來的方向,掏出筆記本改bug,聽公交站廣播是否到車,就是異步。

  對被動用者-公交系統而言:

  1,公交站有廣播的就是非阻塞的。

  2,公交站沒有廣播的就是阻塞的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM