javascript - NodeJS 中的 worker 是什么

标签 javascript node.js multithreading web-services

我主要使用其他编程语言进行编程,但我一直在用户 NodeJS 中制作 Web 应用程序,并且遇到了一些我不太了解的事情。

我提到了https://nodejs.org/api/cluster.html#cluster_how_it_works

我发现这很好地解释了 NodeJS 如何处理大量请求,尽管 Node 只是单线程的。然而,令我困惑的是,当它说一个端口在“许多工作人员”之间共享时。

现在,如果 Node 不是多线程的,那么这些工作线程到底是什么。例如,在 java 中,您可以使用 Completable Futures 拥有多线程应用程序。这些导致不同的线程承担责任。

但是 Node 中的 worker 如果不是线程的话又是什么?

最佳答案

Node 可以在单个线程中轻松处理 10,000 个并发连接(详细信息请参阅 this answer)。对于某些阻塞的事情,它使用线程池,但这对您来说是透明的。您的 JavaScript 在每个进程中都使用单线程事件循环。

请记住,以速度着称的 Web 服务器 nginx 也是单线程的。 Redis,一个以速度着称的数据库,也是单线程的。多线程适用于 CPU 密集型任务(当每个 CPU 使用一个线程时),但对于通常使用 Node 执行的 I/O 密集型任务,单线程事件循环效果更好。

现在,回答您的问题 - 在您链接到的网站正在讨论的集群上下文中,工作线程是一个进程。这些进程中的每一个仍然有一个单线程事件循环,但可以有许多进程同时执行。

有关更多详细信息,请参阅这些答案:

关于javascript - NodeJS 中的 worker 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899718/

相关文章:

javascript - 使用 ES6 过滤带有数组的对象

javascript - Google 分析 - 电子商务产品列表

multithreading - 如何在 Perl 中处理任何事件、RabbitMQ(心跳)和长时间运行的作业?

node.js - Hapi js API基本身份验证错误

python - 从线程发送信号时出错

java - 调用 Object.wait() 后设置对象的字段

javascript - 用javascript替换字符串中的字符

javascript - 使用来自简单数组的 javascript 创建动态 html 表

javascript - Yarn 3.1,Vite 2.9,找不到包vite

node.js - 调试时 "Run-Script"如何在 VS Code 中为 node.js 应用程序工作?