socket同步和异步通信区别_程序员必知必会,同步通信与异步通信,你了解多少...
我們常常說,分布式系統需要進行解耦操作,解耦操作最簡單的就是把現有的系統拆出幾個獨立的模塊,并把這些模塊在不同的機器部署起來。雖然說,分布式系統更加健壯,但往往也引入其他問題,其中,最為麻煩的問題之一就是不同的系統之間如何進行調用的問題。
我們稱不同機器、不同模塊之間的調用為RPC調用,根據實時性的不同,又分為同步調用與異步調用。如何理解同步調用跟異步調用呢?我們可以理解為打電話與發短信,我們在和一個人進行電話通信的時候,打電話是實時的,當你說話之后,對方立馬就能收到,并對你做出回應,而發短信呢?對方可能會稍等一會才會給你回信。一般我們只能跟一個人進行實時的通話,別人打進來會占線,而短信則沒有這種情況,你可以同時接收多條短信,并逐步回信。
同步調用的優點與缺點
同步調用的優點非常的明顯,那是邏輯非常清晰,編寫代碼非常的簡單,但是缺點也是非常的明顯,同步調用有著下面這些缺點。
- 同步調用一般只能做到一對一,很難做到一對多。
- 同步調用非常依賴被調用方,被調用方的吞吐會影響到整個整個系統的吞吐。并且,當調用方發起遠程調用的時候,整個線程都會阻塞,等待被調用方的返回。
- 同步調用實際上并沒有想象中那么健壯,當一個下游系統奔潰的時候,非常容易形成多米諾骨牌效應,引起整個系統的雪崩。
異步調用
異步通信,正是為了解決同步調用中的諸多問題。
首先,異步通信非常容易做到一對多。舉個簡單的例子,在電商交易系統中,用戶成單的時候,需要獲取非常多的資源,除了要獲取用戶的基本信息、收貨地址、商品信息、商品庫存、賣家信息還要獲取一些優惠、反垃圾信息,如果系統是同步調用的,那么我們只能夠串行等待所有系統的返回,如果我們能改成異步通信,那么就能同時對多個系統發起查詢。
其次,異步通信的系統吞吐量更大,上述例子,對每一個系統的查詢,我們都需要等到對方的返回,假如我們有5個下游系統,每個下游系統都需要30ms處理數據,串行化需要150ms才能完成一次操作,假如我們使用異步通信,并且5個系統互補依賴,那么我們可能只要30ms就能得到返回的結果。
最重要的是,異步通信讓我們的系統更加的健壯。有些業務的邏輯非常的重,同步調用容易造成服務的雪崩。舉個簡單的例子,我們在微信等聊天軟件上使用群發功能,如果這個群的人數超過一定數量,通常都會使用異步處理,否則,如果群里有2000人,我們都要往2000個用戶投遞信息,一旦群里突然有紅包等刷屏操作,就非常容易把系統打垮。
異步調用的例子
在現實的生產開發中,異步調用也是非常常見的。例如我們我們常用的第三方支付,當用戶支付完成之后,并不是立馬接收到到用戶的回調,而是先給用戶返回成功,后續再由第三方支付進行回調。
又如我們經常在開發中使用各種MQ,也是常見的異步調用的一種常見的實現方式。
總結
相對于同步調用,異步調用的優點非常的明顯,那異步調用又存在什么樣的問題呢?異步調用有沒有存在其他實現難處呢?歡迎大家關注我,下一次,我們來聊一聊,異步調用中的難點。
總結
以上是生活随笔為你收集整理的socket同步和异步通信区别_程序员必知必会,同步通信与异步通信,你了解多少...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 可视化_Python可视化
- 下一篇: python列表实现原理_Python动