一、同步和异步
同步和异步描述的是用户线程与内核的交互方式:
- 同步是指用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行;
- 异步是指用户线程发起 I/O 请求后仍继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
二、阻塞和非阻塞
阻塞和非阻塞描述的是用户线程调用内核 I/O 操作的方式:
- 阻塞是指 I/O 操作需要彻底完成后才返回到用户空间;
- 非阻塞是指 I/O 操作被调用后立即返回给用户一个状态值,无须等待 I/O 操作彻底完成。
一个 I/O 操作其实分成了两个步骤:发起 I/O 请求和实际的 I/O 操作。
阻塞 I/O 和非阻塞 I/O 的区别在于第一步,发起 I/O 请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞 I/O,如果不阻塞,那么就是非阻塞 I/O。
同步 I/O 和异步 I/O 的区别就在于第二个步骤是否阻塞,如果实际的 I/O 读写阻塞请求进程,那么就是同步 I/O。
网友评论