中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分布式系統關注點(20)——阻塞與非阻塞有什么區別?

發布時間:2020-07-28 08:37:14 來源:網絡 閱讀:298 作者:Zachary_Fan 欄目:軟件技術


如果第二次看到我的文章,歡迎「文末」掃碼訂閱我個人的公眾號(跨界架構師)喲~?

每周五早8點 按時送達到公眾號。當然了,也會時不時加個餐~

?

?

前面一篇文章中,Z哥和你聊了「異步」的意義,以及如何運用它。錯過這篇文章的可以先去看一下再來(分布式系統關注點——深入淺出「異步」)。

?

其實我知道有不少小伙伴容易將「異步」和「非阻塞」搞混。腦海里印象可能是這樣的:異步=非阻塞,同步=阻塞?

?

其實并不是如此,Z哥我這次就想來幫你搞清楚這個問題。

?

?

同步與阻塞/非阻塞

你平時編寫的代碼中,大部分的「同步」調用,本質上都是「阻塞」的。但是「同步」調用也可以做到「非阻塞」的效果。

?

還是拿我們上一篇中提到的排隊買奶茶這個例子,看看為什么說是「同步」+「阻塞」。

?

文章里「同步」的例子說的是,你排隊買奶茶,點完單繼續“占著坑”,不讓后面的人點單,等里面的店員做好奶茶,你拿走了后面的才能點單。這個其實就是「同步」+「阻塞」,「阻塞」體現在哪?

?

分布式系統關注點(20)——阻塞與非阻塞有什么區別?

?

因為這個時候你一直“占著坑”,生怕后面的人先點單,導致店員給他先做。所以,這個時候你就死死的盯著里面,這個就是「阻塞」,因為你除了盯著其它啥都干不了。

?

?

怎么讓「同步」也能不阻塞呢?

?

就是你雖然還是排著隊“占著坑”,但是人沒閑著,低頭玩玩手機,時不時的問里面“我的奶茶做好了沒?我的奶茶做好了沒?”。這個就是「非阻塞」,因為你兩次詢問之間會間隔一段時間,可以在這個時候做其它的事情。本質上是通過將原本的一個「大同步」拆成多個「小同步」達到「非阻塞」的效果。

?

分布式系統關注點(20)——阻塞與非阻塞有什么區別?

?

上圖中,幾次阻塞之間空白區域就可以用于做其它事,所以是「非阻塞」的。

?

?

異步與阻塞/非阻塞

上一篇文章中的「異步」例子就是一個「非阻塞」的例子,我們來看看為什么。

?

奶茶店分了點單區和取餐區之后,做好的飲料就只能從取餐區拿,也意味著接待你進行點單的人并不是實際做奶茶的人。這個時候你會拿到一張取餐號,然后老老實實的去取餐區等著,而不是“占著xx不xx”。

?

如果你很著急要拿到奶茶,不斷的問里面“我的奶茶做好了沒?我的奶茶做好了沒?”,那這個還是「同步」+「非阻塞」的模式。因為這個過程沒有產生「回調」,是你在不斷的主動發起“請求”

?

但如果你不著急,就在邊上開一局吃雞,等著里面做好了叫號,到你號碼了再去拿。這就是「異步」+「非阻塞」。因為這個事情是對方(里面的店員)觸發完成的,這就是「回調」,是對你之前的“點單”請求進行的響應。一來一回完成一個完整的交互。

?

分布式系統關注點(20)——阻塞與非阻塞有什么區別?

?

到這可能你會說,那異步不還是天然「非阻塞」的么?No、No、No。

?

阻塞不阻塞是你自己決定的,你可以阻塞啊。比如,你等的“回調”時候發現沒帶手機,玩不了吃雞,那只能傻傻的在那等著,啥也干不了。如此,這個過程雖然還是「異步」的,但對你來說就是「阻塞」的。

?

?

工作中的同步/異步&阻塞/非阻塞

「同步」+「阻塞」。這種最常見,平時寫的大部分代碼都是如此,就不多說了。

?

?

其實你仔細想一下就會發現,很多知名的框架,都是「同步」+「非阻塞」的,為什么呢?因為你可以繼續像「同步」一樣編寫代碼,但是可以享受到類似「異步」所能帶來的更好的性能,何樂而不為?

?

比如大名鼎鼎的linux中的io復用模型poll/select/epoll,本質上都是「同步」+「非阻塞」的。還有知名網絡通信框架Netty。

?

我們在設計對外的api的時候也可以使用這種模式,降低一些耗時接口調用所產生的影響。這個阮一峰老師已經寫的非常清楚了,我就直接貼個鏈接:http://www.ruanyifeng.com/blog/2018/12/async-api-design.html。

?

?

之所以大家會有錯覺,認為「異步」=「非阻塞」,其實也不是沒有道理。為什么呢?因為我在腦海中搜尋來一番,的確沒想到有什么知名的框架/設計是使用「異步」+「阻塞」來實現的。如果哪位小伙伴有補充,可以在評論區留言告訴大家。

?

?

「異步」+「非阻塞」就多了。任何你看到callback關鍵字的框架都是。

?

?

總結

好了,我們一起總結一下。

?

這次呢,Z哥先通過同步/異步、阻塞/非阻塞之間形成的4種組合形式,聊了下它們到底是怎么回事。

?

然后和你聊了一下工作中哪里能看到它們的存在,以及在一些典型場景下適合用哪一種模式。

?

希望對你有所啟發。

?

?

最后送你一個記住這4個概念的最好辦法。

  • 同步阻塞:你干吧,我看著你干

  • 同步非阻塞:你干吧,我每隔5分鐘來看看

  • 異步阻塞:你干吧,好了告訴我,我等著

  • 異步非阻塞:你干吧,好了告訴我,我先去忙別的了


如果還是記不住,那就記住同步/異步表示“過程”,阻塞/非阻塞表示在這個過程中的“狀態”。至于這句話是怎么來的,回來看這篇文章就行。

分布式系統關注點(20)——阻塞與非阻塞有什么區別?

?

相關文章:

  • 分布式系統關注點——深入淺出「異步」

  • 分布式系統關注點——360°全方位解讀「緩存」


?

作者:Zachary

出處:https://www.cnblogs.com/Zachary-Fan/p/blocknonblock.html

?

如果你喜歡這篇文章,可以點一下左下角的「推薦」。

?

這樣可以給我一點反饋。: )

?

謝謝你的舉手之勞。

?

?關于作者:張帆(Zachary,個人微信號:Zachary-ZF)。堅持用心打磨每一篇高質量原創。歡迎掃描下方的二維碼~。

定期發表原創內容:架構設計丨分布式系統丨產品丨運營丨一些思考

如果你是初級程序員,想提升但不知道如何下手。又或者做程序員多年,陷入了一些瓶頸想拓寬一下視野。歡迎關注我的公眾號「跨界架構師」,回復「技術」,送你一份我長期收集和整理的思維導圖。

如果你是運營,面對不斷變化的市場束手無策。又或者想了解主流的運營策略,以豐富自己的“倉庫”。歡迎關注我的公眾號「跨界架構師」,回復「運營」,送你一份我長期收集和整理的思維導圖。

?分布式系統關注點(20)——阻塞與非阻塞有什么區別?


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修文县| 罗城| 凤山市| 盐源县| 东乌珠穆沁旗| 抚松县| 青铜峡市| 凤山县| 郧西县| 桦南县| 睢宁县| 湖州市| 镇远县| 德江县| 桓台县| 双辽市| 宾阳县| 民和| 申扎县| 肇东市| 孙吴县| 务川| 台北县| 岳西县| 德保县| 仁布县| 若尔盖县| 盐边县| 钟山县| 清流县| 茶陵县| 普陀区| 军事| 陆川县| 团风县| 诸城市| 梁山县| 吴忠市| 湛江市| 武义县| 新丰县|