我對同步異步阻塞和非阻塞的簡單理解

在網絡通訊中,常常能夠看到有人將同步和阻塞等同、異步和非阻塞等同。事實上,這兩對概念有必定的區別,不能混淆。兩對概念的組合,就會產生四個新的概念,同步阻塞、異步阻塞、同步非阻塞、異步非阻塞。網絡

看了https://www.zhihu.com/question/19732473?sort=created&page=3中對這四個概念的講解後,異步

  

做者:silence
連接:https://www.zhihu.com/question/19732473/answer/308092103
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

一、同步阻塞方式,發送方向接收方發送請求後,一直等待響應;接收方處理請求時進行的IO操做若是不能立刻獲得結果,就一直等到返回結果後,才響應發送方,期間不能進行其餘工做。好比,在超市排隊付帳時,客戶(發送方)向收款員(接收方)付款(發送請求)後須要等待收款員找零,期間不能作其餘的事情;而收款員等待收款機返回結果(IO)操做後才能把零錢取出來交給客戶(響應請求),期間也只能等待,不能作其餘事情。這種方式實現簡單,可是效率不高。性能

二、同步非阻塞方式,發送方向接收方發送請求後,一直等待響應;接收方處理請求時進行的IO操做若是不能立刻獲得結果,就當即返回,去作其餘事情,但因爲沒有獲得請求處理結果,不響應發送方,發送方一直等待。一直到IO操做完成後,接收方得到結果響應發送方後,接收方纔進入下一次請求過程。在實際中不使用這種方式。學習

三、異步阻塞方式,發送方向接收方發送請求後,不用等待響應,能夠接着進行其餘工做;接收方處理請求時進行的IO操做若是不能立刻獲得結果,就一直等到返回結果後,才響應發送方,期間不能進行其餘工做。這種方式在實際中也不使用。線程

四、異步非阻塞方式,發送方向接收方發送請求後,不用等待響應,能夠繼續其餘工做;接收方處理請求時進行的IO操做若是不能立刻獲得結果,也不等待,而是立刻返回去作其餘事情。當IO操做完成之後,將完成狀態和結果通知接收方,接收方再響應發送方。繼續使用在超市排隊付帳的例子。客戶(發送方)向收款員(接收方)付款(發送請求)後在等待收款員找零的過程當中,還能夠作其餘事情,好比打電話、聊天等;而收款員在等待收款機處理交易(IO操做)的過程當中還能夠幫助客戶將商品打包,當收款機產生結果後,收款員給客戶結帳(響應請求)。在四種方式中,這種方式是發送方和接收方通訊效率最高的一種。同步

 

再記錄一下我對他們的簡單理解io

1.同步與異步針對的是客戶端,同步是指客戶端要一直等待服務端返回結果,期間不能作其餘事情,異步是指客戶端無需等待服務端結果,能夠作其餘事情效率

2.阻塞和非阻塞針對的是服務端,阻塞是指服務端對客戶的請求執行系統I/O操做時要等待系統給出結果,期間不能作其餘事情,非阻塞是指服務端把請求交給系統I/O後,能夠作其餘事情,而且會輪詢查看以前的請求系統是否給出結果,給出就返回,再處理下一個,沒給出就直接處理下一個打包

3.同步非阻塞方式在實際中不使用是由於這樣客戶對會一直須要等待,由於服務端不會專門開一個線程服務該客戶端的請求,因此客戶端體驗是最差的請求

4.異步阻塞方式也不在實際中使用是由於客戶端能夠一直對服務端進行操做,致使服務端壓力很大,須要很是多的線程來維護請求,因此這要求服務端的性能很是高才行

 

只是簡單理解,會有不少不許確的地方,後面再深刻學習改進

相關文章
相關標籤/搜索