Reactor模式

栏目: Node.js · 发布时间: 7年前

内容简介:借用一张图展示Reactor模式的结构:我们都知道Node.js是事件驱动模型,该模型涉及事件多路分解器和事件队列。所有的io请求都会变成一系列的事件。接下来我们看看上图的Reactor模式发生了什么?

借用一张图展示Reactor模式的结构:

Reactor模式

我们都知道Node.js是事件驱动模型,该模型涉及事件多路分解器和事件队列。所有的io请求都会变成一系列的事件。

接下来我们看看上图的Reactor模式发生了什么?

  1. 事件多路分解器会接受来自应用程序的I/O请求, 然后转给对应I/O硬件处理, 当然应用程序同时会指定一个处理程序(Handler)。
  2. 当一组I/O操作完成时候,事件多路分解器将会把新的事件和事件对应的Handle推进事件队列(Event Quene)。
  3. 此时Event Loop一直去遍历Event Quene中的item。
  4. 取出每个事件关联的处理程序(Handle)去执行。
  5. 当执行某个事件的处理程序(Handle)这个过程中如果又产生新的异步请求如图中的5b,此时又回进入新的一轮I/O请求插入到事件多路分解器。另外需要注意的是事件处理程序执行完闭会把控制权返回给Event Loop。

Event Loop是单线程和半无限循环。被称为半无限循环的原因是因为如果Event Quene中没有事件或Event Demultiplexer没有任何待处理请求,这实际上会在某个时刻退出。

事件多路分解器不是现实世界中存在的组件,而是Reactor模式中的抽象概念。在现实世界中,每个操作系统都有自己的事件多路分解器,例如 Linux 中的epoll,BSD系统中的kqueue(MacOS),Windows中的IOCP等。

但是Node.js需要达到跨平台, 就需要磨平这些平台的差异, 所以Node团队开发了一个名叫libuv的库, libuv提供了一个跨平台的抽象,由平台决定使用libev或IOCP。

下图是常见的libuv的架构图:

Reactor模式

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法新解

算法新解

刘新宇 / 人民邮电出版社 / 2016-12-1 / CNY 99.00

本书分4 部分,同时用函数式和传统方法介绍主要的基本算法和数据结构。数据结构部分包括二叉树、红黑树、AVL 树、Trie、Patricia、后缀树、B 树、二叉堆、二项式堆、斐波那契堆、配对堆、队列、序列等;基本算法部分包括各种排序算法、序列搜索算法、字符串匹配算法(KMP 等)、深度优先与广度优先搜索算法、贪心算法以及动态规划。 本书适合软件开发人员、编程和算法爱好者,以及高校学生阅读参考......一起来看看 《算法新解》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具