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


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

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

  

作者:silence
鏈接:https://www.zhihu.com/question/19732473/answer/308092103
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

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

2、同步非阻塞方式,發送方向接收方發送請求后,一直等待響應;接收方處理請求時進行的IO操作如果不能馬上得到結果,就立即返回,去做其他事情,但由於沒有得到請求處理結果,不響應發送方,發送方一直等待。一直到IO操作完成后,接收方獲得結果響應發送方后,接收方才進入下一次請求過程。在實際中不使用這種方式。

3、異步阻塞方式,發送方向接收方發送請求后,不用等待響應,可以接着進行其他工作;接收方處理請求時進行的IO操作如果不能馬上得到結果,就一直等到返回結果后,才響應發送方,期間不能進行其他工作。這種方式在實際中也不使用。

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

 

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

1.同步與異步針對的是客戶端,同步是指客戶端要一直等待服務端返回結果,期間不能做其他事情,異步是指客戶端無需等待服務端結果,可以做其他事情

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

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

4.異步阻塞方式也不在實際中使用是因為客戶端可以一直對服務端進行操作,導致服務端壓力很大,需要非常多的線程來維護請求,所以這要求服務端的性能非常高才行

 

只是簡單理解,會有很多不准確的地方,后面再深入學習改進


免責聲明!

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



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