- 等待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是否阻塞没有关系,同步调用简单来说就是该进程或线程必须等待整个I/O操作完成,而并不关心具体I/O细节
- 宽泛的说,I/O异步调用是指进程或线程进行I/O时不等待、不休眠,可以继续运行;两种常见的方式如下:
1. 使用一个新的进程或线程执行I/O操作,而当前进程或线程可以继续做其它事情
2. 使用非阻塞I/O;这种情况下进程或线程查询I/O是否就绪,
若未就绪转为执行其它操作,若已就绪则执行具体I/O操作,
此时若搭配DMA,借助中断机制,可达到更好的异步效果。
某些场景下,异步调用可以提供很好的响应性;
同步的等待过程会导致进程或线程休眠,异步调用可以使进程或线程始终处于繁忙状态,说到底这是当前进程或线程对CPU占用的问题,很多时候希望CPU总是处于繁忙状态,不过对于多个进程或线程的情形,当前进程或线程休眠后,CPU会立即调度其它Task。我觉得对于并行情况下的异步调用体现这样一种思想,用尽量少的进程或线程完成尽量多的CPU操作