setstate是同步还是异步_谈谈 IO模型:同步、异步、阻塞、非阻塞
同步/異步、阻塞/非阻塞 說的是一回事兒嗎?
同步/異步、阻塞/非阻塞 你能通俗易懂的講清楚嗎?
Java 中的 BIO、NIO、AIO 你了解嗎?
Socket 編程你還會嗎?
Linux 操作系統的 IO 模型你能講講嗎?
01. 生活中的同步/異步、阻塞/非阻塞
程序猿有了孩子之后,從原來的劈柴喂馬周游世界,就變成了擼碼喂娃家里蹲蹲。
說起喂娃,不得不提小猿給孩子熱奶的事情。給孩子喂奶,有些時候喝著喝著就涼了,要時不時給孩子熱一熱。
起初,由于帶娃沒有經驗,小猿直接把奶瓶放進一個自制的溫奶器(盛滿開水的大碗里),然后一直摸著奶瓶來確定是否熱好了。
1. 對于溫奶器來說,它是「同步」的;
2. 由于熱奶的時候,小猿其它的什么事兒都干不了,小猿被溫奶器「阻塞」;
3. 這種場景稱之為「同步阻塞」。
不過,在小猿熱奶時,孩子嗷嗷待哺,小猿也開始漲姿勢啦,熱奶的空檔開始去撫慰孩子饑餓的心靈,時不時的去摸一下奶瓶有沒有熱好。
1. 對于溫奶器來說,它是「同步」的;
2. 由于小猿在熱奶的空檔,可以撫慰孩子饑餓的心靈,小猿被溫奶器「非阻塞」;
3. 這種場景稱之為「同步非阻塞」。
不過自制的溫奶器確實不太智能,尤其是當老人一人在家帶娃的時候,于是尋找智囊團尋求高招。
這不,在鄰居蘿卜媽媽的建議下,購置了一款既能控制溫度,又能響鈴提醒的智能溫奶器。小猿把奶瓶放進去,設置好溫度,奶熱好后會自動響鈴提醒,但是小猿還是習慣性的直勾勾的盯著溫奶器,你說小猿是不是有點犯傻。
1. 對于溫奶器來說,奶溫好后會通知小猿,它是「異步」的;
2. 小猿還是被溫奶器「阻塞」;
3. 這種場景稱之為「異步阻塞」。
不過,小猿在怎么犯傻充楞,也抵不住孩子因饑餓而哇哇的哭聲。于是小猿在智能溫奶器溫奶的空檔,便開始跟孩子做小游戲、讀讀小豬佩奇,當聽到智能溫奶器的響鈴提醒時,再去拿溫好的奶喂孩子。
1. 對于溫奶器來說,奶溫好后會通知小猿,它是「異步」的;
2. 由于小猿在熱奶的空檔,可以陪孩子做游戲、讀小豬佩奇,小猿被溫奶器「非阻塞」;
3. 這種場景稱之為「異步非阻塞」。
我們把小猿視作調用者,把溫奶器視作被調用者,進行簡單歸檔一下。
同步、異步說的是溫奶器(被調用者)。同步指的是被調用者做完事情之后再返回的機制;異步指的是被調用者先返回,然后再做事情,做完之后再通知調用者的機制。
阻塞、非阻塞說的是小猿(調用者)。阻塞指的是調用者在等待消息時,其它什么都不做;非阻塞指的是調用者在等待消息時,去干了別的事情。
02. 業務研發中的同步、異步
不可缺失的注冊場景。在注冊環節,要進行姓名、證件號碼的二要素實名認證,要等待實名認證 API 的響應結果,才能進行后續的注冊環節,所以此種業務場景可以認為是同步設計。
如果做過支付相關的業務時,充值、提現等等很多涉及到 Money 的業務場景,API 調用時一般會返回處理中,那么調用者可以去做別的事情,可以依賴于相應的查詢接口進行輪詢;不過被調用者在業務處理完成后,一般也會再通知調用者處理之后的結果。此種業務場景的設計,可以認為是異步設計。
簡單歸納一下,純屬一家之言,不喜也請噴。
同步設計,Moudle1 調用 Moudle2,Moudle2 的處理是同步的,在處理完之前不會告訴 Moudle1,只有處理完之后才會告訴 Moudle1。
異步設計,Moudle1 調用 Moudle2,Moudle2 的處理是異步的,Moudle2 在接到請求后,先告訴 Moudle1 已經接到請求,然后異步去處理,處理完再通過通知的方式通知 Moudle1。
03. Java 中的 IO(BIO、NIO、AIO)
IO 顧名思義就是 input(輸入),output(輸出)。
在業務研發中,只要定義好輸入輸出,其它一切只是時間問題 —— 個人愚論。
在 Java 中 IO 模型有三種,分別是 BIO(同步阻塞 IO)、NIO(同步非阻塞 IO)、AIO(異步非阻塞 IO)。
聰明的你肯定會發現,在 Java 中的確是不存在,像小猿那種傻傻盯著智能溫奶器,其它啥事兒也不干的異步阻塞的傻模型。
那么,Java 中的 BIO、NIO、AIO 說的是什么呢?先畫個腦圖給大家,下期我們將結合代碼進行講解。
更多精彩,咱們且聽下次分解。
以上屬于一家之言,如果你若喜歡,歡迎轉發或在看。
總結
以上是生活随笔為你收集整理的setstate是同步还是异步_谈谈 IO模型:同步、异步、阻塞、非阻塞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异步fifo_【推荐】数字芯片异步FIF
- 下一篇: python包的init文件_Pytho