关于Node.js

作为一个异步事件驱动的JavaScript运行时,Node.js旨在构建 可扩展的网络应用程序。在下面的“hello world”示例中,许多 可以同时处理连接。在每个连接上,回调被触发,但如果没有工作要做,Node.js 将休眠.

CJS

这与当今使用操作系统线程的更常见的并发模型形成对比。基于线程的网络效率相对较低且非常难以使用。此外,Node.js 的用户不用担心进程死锁,因为没有锁。Node.js 中几乎没有函数直接执行 I/O,所以除了使用 Node.js 标准库的同步方法执行 I/O 时,进程永远不会阻塞。因为没有任何阻塞,可伸缩系统非常适合在 Node.js 中开发.

如果对这种语言有些不熟悉,可以阅读有关 Blocking vs. Non-Blocking的完整文章 .


Node.js 在设计上类似于 Ruby 的Event Machine和 Python 的 Twisted等系统,并受其影响。Node.js 使事件模型更进一步。它将事件循环呈现为运行时构造而不是库。在其他系统中,总是有一个阻塞调用来启动事件循环。通常,行为是通过脚本开头的回调定义的,最后通过阻塞调用启动服务器,例如EventMachine::run(). 在 Node.js 中,没有这样的启动事件循环调用。Node.js 只是在执行输入脚本后进入事件循环。当没有更多的回调要执行时,Node.js 退出事件循环。这种行为就像浏览器 JavaScript——事件循环对用户是隐藏的.

HTTP 是 Node.js 中的一等公民,在设计时考虑到了流式传输和低延迟。这使得 Node.js 非常适合作为 Web 库或框架的基础.

Node.js 被设计成没有线程并不意味着你不能在你的环境中利用多核。子进程可以使用我们的child_process.fork()API 生成,并且设计为易于通信。建立在同一个接口之上的是cluster 模块,它允许您在进程之间共享套接字以在您的核心上实现负载平衡.