Page 14 - Node.js开发指南
P. 14
1.4 Node.js 的性能 5
的方式请求,返回的结果由事件循环来处理。图1-1 描述了这个机制。Node.js 进程在同一时 1
刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是,
CPU 和内存在同一时间集中处理一件事,同时尽可能让耗时的 I/O 操作并行执行。对于低速
连接攻击,Node.js 只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多
线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。 2
3
4
5
图1-1 事件循环
6
这种异步事件模式的弊端也是显而易见的,因为它不符合开发者的常规线性思路,往往
需要把一个完整的逻辑拆分为一个个事件,增加了开发和调试难度。针对这个问题,Node.js
第三方模块提出了很多解决方案,我们会在第6章中详细讨论。
7
1.4 Node.js 的性能
1.4.1 Node.js 架构简介
8
Node.js 用异步式 I/O 和事件驱动代替多线程,带来了可观的性能提升。Node.js 除了使
用 V8 作为JavaScript引擎以外,还使用了高效的 libev 和 libeio 库支持事件驱动和异步式 I/O。
图1-2 是 Node.js 架构的示意图。
①
Node.js 的开发者在 libev 和 libeio 的基础上还抽象出了层 libuv。对于 POSIX 操作系统, 9
libuv 通过封装 libev 和 libeio 来利用 epoll 或 kqueue。而在 Windows 下,libuv 使用了 Windows
——————————
① POSIX(Portable Operating System Interface)是一套操作系统 API 规范。一般而言,遵守 POSIX 规范的操作系统 10
指的是 UNIX、Linux、Mac OS X 等。