内容简介:借用一张图展示Reactor模式的结构:我们都知道Node.js是事件驱动模型,该模型涉及事件多路分解器和事件队列。所有的io请求都会变成一系列的事件。接下来我们看看上图的Reactor模式发生了什么?
借用一张图展示Reactor模式的结构:
我们都知道Node.js是事件驱动模型,该模型涉及事件多路分解器和事件队列。所有的io请求都会变成一系列的事件。
接下来我们看看上图的Reactor模式发生了什么?
- 事件多路分解器会接受来自应用程序的I/O请求, 然后转给对应I/O硬件处理, 当然应用程序同时会指定一个处理程序(Handler)。
- 当一组I/O操作完成时候,事件多路分解器将会把新的事件和事件对应的Handle推进事件队列(Event Quene)。
- 此时Event Loop一直去遍历Event Quene中的item。
- 取出每个事件关联的处理程序(Handle)去执行。
- 当执行某个事件的处理程序(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的架构图:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 简单工厂模式、工厂模式、抽象工厂模式的解析-iOS
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!