同步、异步、阻塞、非阻塞,这下明白了
2018-07-26 本文已影响98人
闲睡猫
同步阻塞,同步非阻塞,异步阻塞,异步非阻塞...
晕!
头!
转!
向!
对于小白来说,理解这些概念太难了。搜索这些概念,得到的却是更多的概念,什么并发,并行,银行家算法,操作系统调度等等...
难道就没有说人话的解释吗?用更复杂地概念去解释不懂的概念,只会带来更大的认知困惑。
好在,网上有一个关于这些概念的比喻,简洁生动,一目了然。
老张爱喝茶,晚饭后必不可少要喝上一泡茶。
泡茶的第一步是要先煮开水,他用的是老式水壶,水开了,不会响,也不会自动关闭。为了防止水开了溢出,甚至是烧干锅,他就坐在一旁等着。(同步阻塞,老张只能等到水开,在此期间不能去做其他事)
后来,由于新剧上播,老张媳妇在追剧,要老张陪着一起看,宠妻狂魔(怕老婆)的老张不得不从,但心里一直惦记着开水,于是时不时回去厨房看水是否开了。(同步非阻塞,在烧水期间,可以做其他事,但水烧开了不会发出通知,因此需要轮询确认水的状态)
由于不能专心陪媳妇看电视,媳妇有了意见,老张换了一个新的水壶,水烧开后会发起响声并自动断开
由于是新买的水壶,对于其功能还不放心,第一次使用,老张为了安全起见,坐着一旁等着。(异步阻塞,在此期间,老张不能去做其他事,但水烧开后会主动发出通知)
试验成功!
接下来老张再也不用查看水是否烧开了,直接陪老婆看电视,直到听到水烧开的响声再去倒水。(异步非阻塞,烧水期间,老张可以去做其他事,水烧开了会发出通知)
烧水泡茶总结:
- 同步:事情完成后不能发出通知,只能由调用者轮询查看
- 异步:事情完成后,主动向调用者发出通知
- 阻塞:在等待一件事完成期间,不能去做其他事
- 非阻塞:在等待一件事完成期间,可以去做其他事
此比喻来源网络,原作者不明,我在其基础上进行了修改