四种常用IO模型
1) 同步阻塞IO(Blocking IO)
2) 同步非阻塞IO(Non-blocking IO)
3) IO多路复用(IO Multiplexing)
4) 异步IO(Asynchronous IO)
注意以下概念:
1.同步/异步
同步和异步是相对的
同步 前后两件任务, 有严格的顺序一致性(依赖和递进), 按顺序执行, 执行完一个再执行下一个, 需要等待、协调运行
异步 对顺序的要求和依赖关系没那么强, 表现出来就是两个任务可以分给两个人做, 在等待任务A结束时(同步点前)可以进行任务B
多线程就是实现异步的一个方式, 它把"第二件任务"交给其他的线程去做了. 硬件的DMA也是异步.
在实际编程中, 同步和异步区分了请求与响应的交互中, 获取响应的方式
同步: 请求某种结果, 响应返回所需结果
异步: 请求'给我结果', 第一次响应回答'我知道了', 第二次响应通知请求线程'已完成' (通过状态通知或调用请求者注册的回调函数等方式)
2.阻塞/非阻塞
阻塞和非阻塞也是相对概念
阻塞 : 请求-响应比较耗时, 如IO操作
非阻塞: 请求-响应比较迅速, 如没有等待IO完成就直接返回状态值
socket的非阻塞IO需要设置为NONBLOCK