阻塞和非阻塞的区别
-
所谓阻塞,指的是阻碍堵塞。它的本意可以理解为由于遇到了障碍而造成的动弹不得。所谓非阻塞,自然是和阻塞相对,可以理解为由于没有遇到障碍而继续畅通无阻。
对这两个词最好的理解就是,现如今的交通难题,堵车:当汽车可以正常通行时,就是没有堵车时,就可以理解为非阻塞。一旦堵上了,全部停车,一动不动,就可以理解为阻塞。
因此阻塞关注的是不能动,非阻塞关注的是可以动。不能动的那么结果就是只能等待,可以动则代表能够继续前行。因此和阻塞搭配的词一定是等待,和非阻塞搭配的词一定是进行。
回到程序里,阻塞同样意味着停下来等待,非阻塞表明可以继续向下执行。不仅如此,还有组合的阻塞与非阻塞有什么区别呢?我们先用例子来帮助理解。
同步阻塞,指的就是不能同时开工,也不能动。假如在现实生活中只有一条小道,一次只能过一辆车,不过这还不是最可悲的,最可悲的是小道被堵上了。
同步非阻塞,指的就是不能同时开工,但可以动。与同步阻塞一字之差,举例理解就是在现实中只有一条小道,一次只能过一辆车,但是幸运的是能够正常通行。
异步阻塞,这个定义指的是可以同时开工,但不可以动。又是一字之差,用实际例子表示就是有多条路,每条路都可以跑车,但是可悲的是每一条都堵车。
异步非阻塞,可以工时开工,也可以动。同样也是一字之差,用现实意义表示就是有多条路,每条路都可以跑车,并且全程绿灯。从上面的举例中我们能够注意到其实它们的关注点是不同的,只要搞明白了这点,组合起来也不是很难理解。
看完上面的例子之后我们回归到程序里,并且把它们和线程关联起来:同步阻塞,就相当于一个线程在等待。同步非阻塞,就相当于一个线程在正常运行。异步阻塞,指的就是多个线程都在等待。异步非阻塞,则指的是多个线程都在正常运行。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏