同步異步、阻塞非阻塞

同步異步與阻塞非阻塞:python

  同步異步與阻塞非阻塞都是和IO相關的概念,阻塞非阻塞是與調用方相關的概念、而同步異步是被調用被相關的概念。同步異步說的是被調用者結果返回時通知進程的一種通知機制,阻塞非阻塞說的是調用結果返回前進程的狀態,是掛起仍是繼續處理其餘任務。框架

 

同步和異步:異步

  同步請求,A調用B,B的處理是同步的,在處理完以前他不會通知A,只有處理完以後纔會明確的通知A。tornado

  異步請求,A調用B,B的處理是異步的,B在接到請求後先告訴A我已經接到請求了,而後異步去處理,處理完以後經過回調等方式再通知A。spa

  總結:同步和異步最大的區別就是被調用方的執行方式和返回時機。同步指的是被調用方作完事情以後再返回,異步指的是被調用方先返回,而後再作事情,作完以後再想辦法通知調用方。同步和異步是一種 消息通知機制, 是相對於被調用者而言的。線程

 

阻塞非阻塞:進程

  阻塞請求,A調用B,A一直等着B的返回,別的事情什麼也不幹。同步

  非阻塞請求,A調用B,A不用一直等着B的返回,先去忙別的事情了。非阻塞看似簡單,可是在調用時須要增長線程或者進程進行業務處理,這樣線程間切換的效率問題須要被評估。效率

  總結:阻塞和非阻塞最大的區別就是在被調用方返回結果以前的這段時間內,調用方是否一直等待。阻塞指的是調用方一直等待別的事情什麼都不作。非阻塞指的是調用方先去忙別的事情。阻塞非阻塞 描述的是進程等待調用結果返回前的狀態, 是相對於調用者而言的。請求

 

IO模型:

  BIO (Blocking I/O):同步阻塞I/O模式,即調用方阻塞等待,被調用方直處處理完成同步返回。

  NIO (Non-blocking I/O):主要指同步非阻塞I/O模式,即調用方非阻塞線程繼續執行,被調用方同步處理並直接返回,主線程非阻塞執行,可是須要去不斷地去輪詢獲取同步執行的狀態,根據狀態再作進一步的操做。

  AIO (Asynchronous I/O):異步非阻塞I/O模型,即調用方線程不阻塞,繼續執行,被調用方異步處理,處理完成以後以通知的方式或者callback的方式通知主線程。python的celery很容易實現異步非阻塞的任務,python 的 tornado 框架就是一種異步非阻塞框架。

相關文章
相關標籤/搜索