node.js - node.js 是如何工作的?

标签 node.js parallel-processing

我对 nodejs 的一些事情不太了解。每个信息源都说,由于缺少线程锁定和上下文切换,node.js 比标准线程 Web 服务器更具可扩展性,但我想知道,如果 node.js 不使用线程,它如何并行处理并发请求?事件 I/O 模型是什么意思?

非常感谢您的帮助。 谢谢

最佳答案

Node 完全是事件驱动的。基本上,服务器由一个线程组成,一个接一个地处理一个事件。

一个新的请求进来是一种事件。服务器开始处理它,当有阻塞 IO 操作时,它不会等到它完成,而是注册一个回调函数。然后服务器立即开始处理另一个事件(可能是另一个请求)。当 IO 操作完成时,这是另一种事件,服务器将通过执行回调来处理它(即继续处理请求)。

所以服务器永远不需要创建额外的线程或在线程之间切换,这意味着它的开销非常小。如果你想充分利用多个硬件核心,你只需启动多个node.js实例

更新 在最低级别(C++ 代码,不是 Javascript),there actually are multiple threads在 node.js 中:有一个 IO worker 池,其工作是接收 IO 中断并将相应的事件放入队列中以供主线程处理。这样可以防止主线程被中断。

关于node.js - node.js 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497076/

相关文章:

javascript - 更新计数器时 Cassandra Node.js 驱动程序内存泄漏

javascript - 了解 .each() 发起的所有异步调用何时完成执行

c# - 使用 C# 中的线程将大型文本文件(500 万条记录)并行拆分为较小的文件

parallel-processing - OpenMP 程序比顺序程序慢

python - pathos: parallel processing options - 有人能解释一下差异吗?

C++ OpenMP 关键 : "one-way" locking?

multithreading - 如何在Matlab中最充分地利用多线程CPU?

javascript - 路径模式仅匹配express.js中的6个符号哈希

node.js - 带有 nodeBB redis 的 Docker 配置不正确?

node.js - 如何更改船长 maxTimeToBuffer 属性