node.js - 在 Nodejs 工作线程之间共享大型数据集
问题描述
在我的 nodejs 服务器中,我需要对来自 SQL Server 数据库的大型数据集执行 CPU 密集型计算。我一直在阅读有关 Worker Threads 作为并行处理数据的一种方式,因为我需要尽快完成所有计算。
我需要在同一个数据集上执行大约 50 种不同的数学运算。在进行操作时,我绝不会修改数据集,并且工作人员不依赖其他工作人员的结果来计算他们的结果。
在我的所有员工之间共享这个巨大的 SQL 表的最佳方法是什么?我正在考虑在主线程上查询数据,然后将其存储在每个工作线程都可以访问的地方,但不知道该怎么做。
解决方案
NodeJs 没有线程的概念,因为它是单线程的,您可以使用 C++ 和N-API实现相同的功能
非 C++ 方法是生成多个进程来执行此操作。
SQL ->流到主线程 ->从主线程生成多个进程->通过 IPC 将数据传递给子进程-> 在接收数据时每个进程都可以开始处理
您也可以依赖Pub-sub来实现同样的目的。
SQL -> 主流程 -> 使用数据集发布事件 -> 有多个订阅者执行指定操作。
RabbitMq是一种选择,有许多免费和付费的消息代理可用。
但是,您可以发布的消息数据有一个最大限制,并且这些限制会有所不同。
希望这对您有所帮助:) 干杯
推荐阅读
- javascript - 带有下拉菜单和按钮的 Flexbox 布局
- java - 字符串加运算符和字符串生成器追加的优缺点是什么?
- android - 如何让安卓应用/游戏在运行时占据手机的整个屏幕?
- java - Java 日志记录语句的奇怪行为
- mysql - 按间隔将时间戳分组在一起并以秒为单位计算差异
- unity3d - 在 Unity3D 中异步加载场景不起作用
- node.js - 表单发布使 req.body.[输入名称] 未定义
- matlab - MATLAB fmincon 报告的 Hessian 矩阵,fminunc 是平均 Hessian Matrix 吗?
- python - 一次迭代两个 Pytorch 张量?
- java - 如何提交清单
> 到 ThreadPoolExecutor,每个线程将选择一个 LinkedBlockingQueue 并并行执行