阻塞与非阻塞、同步与异步,究竟有何本质区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1607个文字,预计阅读时间需要7分钟。
编程中对这两个概念理解不够清晰,网上资料描述很模糊,有时还会自相矛盾,容易混淆。以下是我对这两个概念的理解:
首先,我们来看看相关的技术书籍。
编程中一直对这两个概念不是很理解,在网上搜了很多资料大概描述的其实都很模糊,有时候还自相矛盾,很容易搞混,这里说一下我对这两个概念的理解。
首先看一下相关技术书籍对这两个概念的描述,下面分别是摘自《深入理解Java核心技术》和《Java并发程序设计中的》的内容。
摘自《深入理解Java核心技术》14.2:
当I/O操作发生时,一定是有两方参与的,分别是调用方和被调用方。阻塞和非阻塞描述的是调用方,同步和异步描述的是被调用方。
例如A调用B:
1.如果是阻塞,那么A在发出调用命令后,要一直等待B返回结果。
2.如果是非阻塞,那么A在发出调用命令后,不需要等待,可以去做自己的事情。
3.如果是同步,那么B在收到A的调用命令后,会立即执行要做的事,A的本次调用可以得到结果
4.如果是异步,那么B在收到A的调用命令后,不保证会立即执行要做的事,但是保证会做,B在做好了之后会通知A。A的本次调用得不到·结果,但是B执行完成要做的事之后会通知A。
因为同步/异步与阻塞/非阻塞描述的对象不同,所以这二者之间是没有必然联系的。也就是说,同步不一定阻塞,异步也不一定非阻塞。
本文共计1607个文字,预计阅读时间需要7分钟。
编程中对这两个概念理解不够清晰,网上资料描述很模糊,有时还会自相矛盾,容易混淆。以下是我对这两个概念的理解:
首先,我们来看看相关的技术书籍。
编程中一直对这两个概念不是很理解,在网上搜了很多资料大概描述的其实都很模糊,有时候还自相矛盾,很容易搞混,这里说一下我对这两个概念的理解。
首先看一下相关技术书籍对这两个概念的描述,下面分别是摘自《深入理解Java核心技术》和《Java并发程序设计中的》的内容。
摘自《深入理解Java核心技术》14.2:
当I/O操作发生时,一定是有两方参与的,分别是调用方和被调用方。阻塞和非阻塞描述的是调用方,同步和异步描述的是被调用方。
例如A调用B:
1.如果是阻塞,那么A在发出调用命令后,要一直等待B返回结果。
2.如果是非阻塞,那么A在发出调用命令后,不需要等待,可以去做自己的事情。
3.如果是同步,那么B在收到A的调用命令后,会立即执行要做的事,A的本次调用可以得到结果
4.如果是异步,那么B在收到A的调用命令后,不保证会立即执行要做的事,但是保证会做,B在做好了之后会通知A。A的本次调用得不到·结果,但是B执行完成要做的事之后会通知A。
因为同步/异步与阻塞/非阻塞描述的对象不同,所以这二者之间是没有必然联系的。也就是说,同步不一定阻塞,异步也不一定非阻塞。

