尽管是单线程的,node.js 怎么更快? 我没有运行任何测试来查找统计数据,但是在挖掘 node.js 论坛时,我发现每个人都说它更快更轻量级。 但是再轻量级的服务器,单线程服务器怎么比多线程服务器快呢?
最佳答案
首先,为什么程序在多线程时更快?
这部分是因为多线程程序可以在多个内核上运行,但到目前为止,主要原因是当线程等待某个 IO 操作时(这很常见,尤其是在服务器中),其他线程仍然可以进行。
现在, Node 呢?
Node 不是单线程的。 JS 中的用户脚本在一个线程中执行,但所有 IO 操作都由 libuv 和 多线程的操作系统原生处理。
实际上,这意味着并行处理多个请求。下面是一个非常(非常)简化的可能操作序列示例:
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/