五种IO模型
阻塞IO
优点:数据可用立刻返回,没有延迟;调用简单;
缺点:整个过程,用户进程都处于阻塞等待状态。
非阻塞IO
这种方式下,用户进程定期轮询,每次轮询都相当于一个小的阻塞(尤其是网络请求)。而在轮询间隔期间可以做其他的事情。
IO复用
在这两个过程中,select 只负责等待,recvfrom 负责从操作内核空间拷贝数据。
从这点来说多路复用跟阻塞IO很像,但因为selector可以对多个文件描述符进行阻塞监听,所以效率比阻塞IO的高。
信号驱动IO
所谓信号驱动,其实就是提前向内核注册,然后收到通知后回调处理函数。
异步IO
异步IO有点类似信号驱动IO,区别在于
- 信号驱动IO是由内核通知我们何时可以启动一个IO操作
-
异步IO模型是由内核告知我们IO操作何时完
三种并发编程模型
actor模型
reactor模型
proactor模型
常见的Reactor模型
单线程模型
多线程模型
这种模型就是现在成熟的Reactor模式。但是请求进一步增加的时候,Reactor会出现瓶颈。因为Reactor既要处理IO操作请求,又要响应连接请求
主从多线程模型
主Reactor用于响应连接请求,从Reactor用于处理IO操作请求。