在IO和網絡程式設計中,我們經常看到幾個概念:同步、異步、阻塞、非阻塞。
同步和異步
同步和異步是針對應用程式和核心的互動而言的,同步指的是使用者程序觸發IO 操作并等待或者輪詢的去檢視IO 操作是否就緒,而異步是指使用者程序觸發IO 操作以後便開始做自己的事情,而當IO 操作已經完成的時候會得到IO 完成的通知。
阻塞和非阻塞
阻塞和非阻塞是針對于程序在通路資料的時候,根據IO操作的就緒狀态來采取的不同方式,說白了是一種讀取或者寫入操作方法的實作方式,阻塞方式下讀取或者寫入函數将一直等待,而非阻塞方式下,讀取或者寫入方法會立即傳回一個狀态值。
了解方式
乍一看這四個概念的解釋會瞬間感到頭大,也經常講同步異步等同于阻塞非阻塞,其實,區分他們非常簡單。
同步異步與阻塞非阻塞的主要差別是針對對象不同。
同步異步是針對調用者來說的,調用者發起一個請求後,一直幹等被調用者的回報就是同步,不必等去做别的事就是異步。
阻塞非阻塞是針對被調用者來說的,被調用者收到一個請求後,做完請求任務後才給出回報就是阻塞,收到請求直接給出回報再去做任務就是非阻塞。
舉例了解
在公交站等公交
對調用者-乘客而言:
1,一直幹望着公交來的方向,就是同步。
2,不望着公交來的方向,掏出筆記本改bug,聽公交站廣播是否到車,就是異步。
對被動用者-公交系統而言:
1,公交站有廣播的就是非阻塞的。
2,公交站沒有廣播的就是阻塞的。
轉載于:https://www.cnblogs.com/guanghe/p/11276544.html