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