首先來說下概念:
同步:呼叫方等待被呼叫方執行完成,才能繼續執行,在被呼叫方執行期間,呼叫方會一直等待。
非同步:通常是被呼叫方直接返回乙個結果,告訴呼叫方,我們已經接收到任務了,然後再去慢慢的執行任務。呼叫方直接獲取到了結果,就會繼續執行後面的任務。
阻塞:呼叫方雖然可能已經知道被呼叫方已經獲取到任務了,但是就是想要等待被呼叫方真正的執行完成。
非阻塞:呼叫方不關心,也不會等待被呼叫方完成任務,因為如果有需要,被呼叫方會來通知呼叫方。
以上是我對同步與非同步,阻塞與非阻塞的個人理解,其實同步和非同步,主要是看被呼叫者的實現方式,而阻塞和非阻塞是由呼叫者所決定的,下面我們通過乙個簡單的生活例子來加強我們的理解:
情景一:10個人去麵館吃麵,麵館的規矩是排隊買麵,即乙個人付完錢,並取得面後,第二個人才能付錢拿麵,這種方式就是同步的方式,效率非常低。
情景二:此時店家想了乙個方法,乙個人專門負責收錢,乙個人專門負責下面,10個人只需要排隊付錢,就能拿到小票,這樣很快10個人就能完成點餐,而且下面的人也不需要一碗一碗的下了,這種方式就是非同步了。
情景三:雖然我們拿到了小票,但是我們不知道自己的面什麼時候好,所以我們還是在視窗前等待,這就是阻塞。
情景四:店員在每一碗好的時候,大喊一聲小票號,吃麵的人聽到自己的號再去拿麵,期間是不需要傻等,可以玩玩手機,這就是非阻塞。
在**的角度去理解:
例如我們通過使用callable來開啟乙個多執行緒,此時是一次非同步操作,如果我們不關心子執行緒的返回值是什麼,那麼我們就是非阻塞了,如果我們呼叫的future的get方法,那麼我們就被阻塞了。
同步 非同步 阻塞和非阻塞
同步 非同步 阻塞和非阻塞 在進行windowsapi winsock 網路程式設計時,我們常常見到同步 非同步 阻塞和非阻塞四種呼叫方式。這些方式其實都可以擴充套件為廣義的概念,幫助我們理解多執行緒,多程序,實時作業系統等更廣的概念。同步 synchronic 所謂同步,就是在發出乙個功能呼叫時,...
同步 非同步 阻塞和非阻塞
在進行網路程式設計時,我們常常見到同步 非同步 阻塞和非阻塞四種呼叫方式。這些方式彼此概念並不好理解。所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。按照這個定義,其實絕大多數函式都是同步呼叫 例如sin,isdigit等 但是一般而言,我們在說同步 非同步的時候,特指那些需...
同步 非同步 阻塞和非阻塞
這幾個概念總是記了又忘。寫下來。同步和非同步是針對應用程式和核心的互動而言的 同步指的是使用者程序觸發io操作並等待或者輪詢的去檢視io操作是否就緒,非同步是指使用者程序觸發io操作以後便開始做自己的事情,而當io操作已經完成的時候會得到io完成的通知。阻塞和非阻塞是針對於程序在訪問資料的時候,根據...