javascript - 为什么 node.js 在单线程时速度很快?

标签 javascript node.js

尽管是单线程的,node.js 怎么更快? 我没有运行任何测试来查找统计数据,但是在挖掘 node.js 论坛时,我发现每个人都说它更快更轻量级。 但是再轻量级的服务器,单线程服务器怎么比多线程服务器快呢?

最佳答案

首先,为什么程序在多线程时更快?

这部分是因为多线程程序可以在多个内核上运行,但到目前为止,主要原因是当线程等待某个 IO 操作时(这很常见,尤其是在服务器中),其他线程仍然可以进行。

现在, Node 呢?

Node 不是单线程的。 JS 中的用户脚本在一个线程中执行,但所有 IO 操作都由 libuv 和 多线程的操作系统原生处理。

More explanation here .

实际上,这意味着并行处理多个请求。下面是一个非常(非常)简化的可能操作序列示例:

user script                     | node + OS "threads" (libuv)
-------------------------------------------------------------
receive and analyze request 1   |
ask node for file 1             | fetching file 1
receive and analyze request 2   | fetching file 1
ask node for file 2             | fetching file 1, fetching file 2
prepare response header 1       | fetching file 2
tell node to send file 1        | send file 1, fetching file 2
prepare response header 2       | send file 1
tell node to send file 2        | send file 1, send file 2

node(和 io.js)的整个架构使得高并行度变得简单。用户线程仅由事件循环调用非常短的任务,这些任务在下一个 IO 操作时停止(嗯,不仅是 IO,而且最常见)当您的代码向 Node 提供将在操作完成时调用的回调时。

当然,这仅在您使用 Node.js 的异步函数时才有效。每当您使用以“同步”结尾的函数时,例如 writeFileSync ,您正在击败并发性。

关于javascript - 为什么 node.js 在单线程时速度很快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30638549/

相关文章:

node.js - 使用 DirectLine 和网络聊天 (Node.js) 在 bot-framework v4 中发送打字指示符

node.js - Mocha 可以测试一次加载需求吗?

node.js - 使用expressjs/nodejs store session登录到redis

javascript - 如何在调查问卷中添加按钮

javascript - 在图表 js 中使标签响应

javascript - 如何将 URL 与任意数字进行比较?

javascript - 路由时无法检索组件模板

node.js - NodeJS 提取 tbz 文件并保存到磁盘

javascript - 无法将数据从套接字发送到特定客户端

javascript - PHP Symfony API 和 jQuery Ajax 请求