阻塞、非阻塞与同步、异步的区别
生活随笔
收集整理的這篇文章主要介紹了
阻塞、非阻塞与同步、异步的区别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、同步和異步
二者關(guān)注的是消息通信機(jī)制 。
- 所謂同步,就是在發(fā)出一個(gè)“調(diào)用”時(shí),在沒(méi)有得到結(jié)果之前,該*調(diào)用*就不返回,但是一旦調(diào)用返回,就得到返回值了。
- 異步則是相反,“調(diào)用”在發(fā)出之后,這個(gè)調(diào)用就直接返回了,所以沒(méi)有返回結(jié)果。換句話說(shuō),當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者不會(huì)立刻得到結(jié)果。而是在“調(diào)用”發(fā)出后,“被調(diào)用者”通過(guò)狀態(tài)、通知來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)處理這個(gè)調(diào)用。
二、阻塞和非阻塞
關(guān)注的是程序在等待調(diào)用結(jié)果(消息,返回值)時(shí)的狀態(tài)。
- 阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線程會(huì)被掛起。調(diào)用線程只有在得到結(jié)果之后才會(huì)返回。
- 非阻塞調(diào)用指在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)掛起當(dāng)前線程,可以去做其他事情。
三、栗子
下面是一個(gè)很有意思的說(shuō)明,相信更能讓大家直觀的感受到四者的區(qū)別:
老張愛(ài)喝茶,廢話不說(shuō),煮開(kāi)水。出場(chǎng)人物:老張,水壺兩把:
- 普通水壺,簡(jiǎn)稱水壺;
- 會(huì)響的水壺,簡(jiǎn)稱響水壺。
?
——來(lái)源網(wǎng)絡(luò),作者不明。
作者:愚抄 鏈接:https://www.zhihu.com/question/19732473/answer/23434554 來(lái)源:知乎 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。四、總結(jié)
- 所謂同步異步,只是對(duì)于水壺(被調(diào)用的函數(shù))而言。普通水壺,同步;響水壺,異步。雖然都能干活,但響水壺可以在自己完工之后,提示老張水開(kāi)了。這是普通水壺所不能及的。同步只能讓調(diào)用者去輪詢自己(情況2中),造成老張效率的低下。
- 所謂阻塞非阻塞,僅僅對(duì)于老張(線程)而言。立等的老張,阻塞;看電視的老張,非阻塞。情況1和情況3中老張就是阻塞的,媳婦喊他都不知道。雖然3中響水壺是異步的,可對(duì)于立等的老張沒(méi)有太大的意義。所以一般異步是配合非阻塞使用的,這樣才能發(fā)揮異步的效用。
五、拓展
?
(SAW:Game Over!)
總結(jié)
以上是生活随笔為你收集整理的阻塞、非阻塞与同步、异步的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Cpp 对象模型探索 / operato
- 下一篇: Cpp 对象模型探索 / placeme