现在的位置: 首页 > 综合 > 正文

5种网络IO模型、Reactor、Proactor

2018年10月03日 ⁄ 综合 ⁄ 共 811字 ⁄ 字号 评论关闭

网络IO模型包括:阻塞I/O、非阻塞I/O、I/O复用(select和poll)、信号驱动I/O(SIGNO)、异步I/O(Posix的aio_系列函数)

一、同步IO模型

1.1 阻塞I/O

1.2 非阻塞I/O

1.3 I/O复用(select和poll)

1.4 信号驱动I/O(SIGNO)

二、异步IO模型

2.1 异步I/O(Posix的aio_系列函数)

2.2 五种IO模型的比较

三、Reactor与Proactor

3.1 基本概念

      两种I/O多路复用模式:Reactor和Proactor。

     Reactor模式采用同步IO,Proactor采用异步IO。

     事件、事件处理器(回调函数)、事件分离器。 开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。

3.2 Reactor实现读

      1. 注册读就绪事件和相应的事件处理器;

      2. 事件分离器等待事件;

      3. 事件到来,激活分离器,分离器调用事件对应的处理器;

      4. 事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返回控制权。

3.3 Proactor实现读

      1. 处理器泛起异步读操作(注意:操作系统必须支持异步IO)。这种情况下,处理器无视IO就绪事件,它关注的是完成事件;

      2. 事件分离器等待操作完成事件;

      3. 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存入用户自定义缓冲区,最后通知事件分离器读操作完成。

      4. 事件分离器呼唤处理器;

      5. 事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返回控制权。

参考资料:

      书籍:《UNIX网络编程》第6.3节 I/O模型

      网络编程Reactor与Proactor:http://www.cnblogs.com/dawen/archive/2011/05/18/2050358.html

抱歉!评论已关闭.