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