同步、异步、阻塞、非阻塞
#### 理解一:
在处理 IO 的时候,阻塞和非阻塞都是同步 IO。
只有使用了特殊的 API 才是异步 IO。
![]()
只有使用了特殊的 API 才是异步 IO。

作者:陈硕
链接:https://www.zhihu.com/question/19732473/answer/26091478
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
#### 理解二:
同步异步是行为,阻塞非阻塞是状态。同步异步的时候,线程A与B的行为处于切换行动过程中,同步按固定顺序执行,异步不按固定顺序执行,而是切换执行;阻塞非阻塞的时候,线程A与B的处于等待过程中,阻塞等待返回结果,非阻塞直接返回,不一定是所期望的结果,但仍然继续往下执行。
#### 理解三:
- 阻塞/非阻塞, 同步/异步的概念要注意讨论的上下文:
- 在进程通信层面, 阻塞/非阻塞, 同步/异步基本是同义词, 但是需要注意区分讨论的对象是发送方还是接收方。
- 发送方阻塞/非阻塞(同步/异步)和接收方的阻塞/非阻塞(同步/异步) 是互不影响的。
- 在 IO 系统调用层面( IO system call )层面, 非阻塞 IO 系统调用 和 异步 IO 系统调用存在着一定的差别, 它们都不会阻塞进程, 但是返回结果的方式和内容有所差别, 但是都属于非阻塞系统调用( non-blocing system call )
2. 非阻塞系统调用(non-blocking I/O system call 与 asynchronous I/O system call) 的存在可以用来实现线程级别的 I/O 并发, 与通过多进程实现的 I/O 并发相比可以减少内存消耗以及进程切换的开销。
作者:萧萧
链接:https://www.zhihu.com/question/19732473/answer/241673170
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号