node.js - 'cluster' 和 'worker_threads' 如何在 Node.js 中工作?
问题描述
我是否理解正确:如果我使用
cluster
包,是否意味着为每个创建的工作人员创建一个新的节点实例?cluster
和worker_threads
包有什么区别?
解决方案
实际上,您的不同之处在于基于进程与基于线程。线程共享内存(例如SharedArrayBuffer
),而进程不共享。从本质上讲,它们绝对是同一件事。
- 每个 CPU 上启动一个进程,并且可以通过IPC进行通信。
- 每个进程都有自己的内存和自己的 Node (v8) 实例。创建大量它们可能会产生内存问题。
- 非常适合生成许多共享相同端口的 HTTP 服务器 b/c
主主进程会将请求多路复用到子进程。
- 总共一个过程
- 创建多个线程,每个线程都有一个 Node 实例(一个事件循环,一个 JS 引擎)。大多数 Node API 对每个线程都可用,除了少数几个。所以本质上 Node 是嵌入自己并创建一个新线程。
- 与其他线程共享内存(例如
SharedArrayBuffer
) - 非常适合处理数据或访问文件系统等 CPU 密集型任务。因为 NodeJS 是单线程的,所以同步任务可以通过 worker 提高效率
推荐阅读
- rest - REST:通过不同的标识符更新资源?
- hyperledger-fabric - 每次访问都会创建 .hfc-key-store 证书
- ios - iOS 应用程序身份验证和 API
- php - 如何在子查询laravel eloquent with condition中使用“With”?
- react-native - 使用 react-native-i18next/locize/locize 后端处理语言环境更改
- javascript - 确定设备方向(特定条件)
- c# - 在 Net .Core 中提交 Ajax 表单
- java - 在 docker 容器中部署 .war 文件:app.war 中没有主要清单属性
- python - 从具有容差的数据库中获取每 n 小时的数据
- python-3.x - 如何在烧瓶中使用中止方法?