如网络编程中accept之后等待数据到达,并且读取数据为例:
Reactor: 基于同步IO
1. 线程等待读取socket数据,将socketfd添加到事件分派器中,如添加到epoll;
2. 事件分派器阻塞等待socketfd可读事件发生;
3. 若数据到达,socketfd变成可读状态,事件分派器通知线程(或者回调)处理;
4. 线程阻塞完成从socket读数据;
--我要读,告诉你,你发现可以读的时候通知我,然后我去读;
Proactor: 基于异步IO
1. 线程等待读取socket数据,将存储数据的缓冲区和和读事件请求交给事件分派器;
2. 事件分派器等待socket数据到达;
3. 若数据到达,事件分派器不通知线程读取,而是直接完成数据的读取;
4. 通知线程读取数据完成,并已经存入提供的缓冲区中;
--我要读,告诉你,你帮我读好,再通知我;