没有合适的资源?快使用搜索试试~ 我知道了~
2. 注册EventHandler到InitiationDispatcher中,每个EventHandler包含对相应Handle的引用,从而建立Handle到
资源详情
资源评论
资源推荐
两种 IO 多路复用模式:Reactor 和 Proactor 基于事件驱动
一般的,IO 多路复用机制都依赖于一个事件多路分离器。分离器可将事件源的 IO 事件分离
出来,并分发到对应的 read write 事件处理器中。需要预先注册处理的事件和事件处理器
(回调函数),事件分离器负责将请求传递给事件处理器。
Reactor 采用的是同步 IO
Proactor 采用的是异步 IO
在 Reactor 中,事件分离器负责等待文件描述符或 socket 为读写操作准备就绪,然后将就绪
事件传递给对应的处理器,最后由处理器负责完成实际的读写工作。
而在 Proactor 模式中,处理器--或者兼任处理器的事件分离器,只负责发起异步读写操作。
IO 操作本身由操作系统来完成。传递给操作系统的参数需要包括用户定义的数据缓冲区地
址和数据大小,操作系统才能从中得到写出操作所需数据,或写入从 socket 读到的数据。
事件分离器捕获 IO 操作完成事件,然后将事件传递给对应处理器。比如,在 windows 上,
处理器发起一个异步 IO 操作,再由事件分离器等待 IOCompletion 事件。典型的异步模式实
现,都建立在操作系统支持异步 API 的基础之上,我们将这种实现称为“系统级”异步或“真”
异步,因为应用程序完全依赖操作系统执行真正的 IO 工作。
在 Reactor 中实现读:
- 注册读就绪事件和相应的事件处理器
- 事件分离器等待事件
- 事件到来,激活分离器,分离器调用事件对应的处理器。
- 事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返还控制权。
在 Proactor 中实现读:
- 处理器发起异步读操作(注意:操作系统必须支持异步 IO)。在这种情况下,处理器无视 IO
就绪事件,它关注的是完成事件。
- 事件分离器等待操作完成事件
- 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存
入用户自定义缓冲区,最后通知事件分离器读操作完成。
- 事件分离器呼唤处理器。
- 事件处理器处理用户自定义缓冲区中的数据,然后启动一个新的异步操作,并将控制权返
回事件分离器。
可以看出,两个模式的相同点,都是对某个 IO 事件的事件通知(即告诉某个模块,这个 IO
操作可以进行或已经完成)。在结构上,两者也有相同点:demultiplexor 负责提交 IO 操作(异
步)、查询设备是否可操作(同步),然后当条件满足时,就回调 handler;不同点在于,异步
情况下(Proactor),当回调 handler 时,表示 IO 操作已经完成;同步情况下(Reactor),回调 handler
时,表示 IO 设备可以进行某个操作(can read or can write)。
Reactor
Reactor 模式是基于事件驱动,有一个或多个并发输入源,有一个 servicehandler,有多个
requesthandler,这个 servicehandler 会同步的将输入的请求多路复用的分发给相应的
requesthandler。
三山卡夫卡
- 粉丝: 16
- 资源: 323
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0