问题标签 [node-worker-threads]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
41 浏览

node.js - 修改一个http请求对象,使其可以传递给worker_thread

我有一个执行一些冗长计算的服务器。所以我让调用的文件parser.js在工作线程中运行。

现在,parser需要 httprequest对象(来自 http 模块),因为根据请求参数/正文,parser可能需要访问request.

这就是为什么我不能将请求的特定参数放入workerData. 物业parser需求由客户决定。

请求对象具有功能并且具有循环引用。

JSON.stringify不会工作,workerData也不能有功能

我需要在不破坏循环引用的情况下以某种方式删除这些函数。

尝试过的解决方案

我想出了这个

上述功能适用于

输出

它对服务器不起作用

代码

错误在LABEL2

上面的代码出错了LABEL2,说res.end isn't a function。运行typeof res.end返回object而不是function.

注释掉LABEL2会导致错误LABEL1

表示rmObjFunctions(req)损坏的response对象。

错误在LABEL1

笔记:

使用修改 httprequest对象rmObjFunctions(req)也会损坏该response对象。

你可以像我做的那样捕捉上面的错误,然后在 catch 块上,做res.end()它会告诉你end不是一个函数。

如果typeof res.end它会输出object,则不会function

0 投票
0 回答
35 浏览

node.js - 在节点 js 应用程序中使用“worker_threads”lib 使用别名 npm 包时获取 MODULE_NOT_FOUND

我正在尝试在我的 NodeJS 应用程序中的每个请求上生成新线程。我开始为此使用“workerpool”npm 包。它在幕后使用'worker_threads'。设置很简单,但是当我尝试像这样执行我的专用工作者时:

我得到MODULE_NOT_FOUND (ui-utils)。它无法找到 dedicatedWorkerImpl 的依赖项之一。这是因为 ui-utils 是 package.json 中定义的别名

有没有办法以这样的方式配置它 worker_threads 会捡起它?

0 投票
1 回答
19 浏览

node.js - MessagePort postMessage 背压

我有大量的工作要运行。如果单线程运行,执行速率将受 CPU 限制(序列化/反序列化等)。我想通过在一组节点工作线程中划分作业来提高吞吐量。问题在于,创造就业机会的速度很容易超过工人消耗的速度。作业集很大,无法放入内存。因此,如果生产者领先于消费者,那么进程会因为内存不足而失败。

这是一个工作示例。当节点配置为最小堆时,它在我的计算机上生成大约 3000 个作业后崩溃--max-old-space-size=4

是否有与节点工作线程一起使用的进程内队列?关键是为生产者提供背压,将排队的作业数量限制在合理的数量。

0 投票
1 回答
327 浏览

node.js - 为什么在尝试破解 node.js 中的以太坊密钥库钱包文件时,我的所有输出都出现在每次暴力尝试之前

我发现一篇文章描述了如何通过猜测单个密码来恢复以太坊钱包密钥库,但是,它使用节点同步代码,我正在尝试将其转换为异步代码,以便我可以使用 worker_threads 使用多线程。

run.js(片段)

破解.js(片段)

worker.js(片段)

我不明白为什么堆栈在实际尝试每次破解尝试之前都会处理所有输出。

以下是输出,然后在尝试破解每个线程的一个密码时停顿很长时间,而不是像输出似乎表明的那样每个线程有多个密码:

在几乎瞬间输出后,它在尝试破解 4 个密码时暂停,然后该过程退出(没有错误)。

我希望输出在每个逗号之后暂停,,但它会在尝试任何操作之前输出所有内容。

这个想法是,例如,每个线程破解 10 个密码,其中有 4 个线程,然后当工作人员终止时,将使用接下来的 10 个密码启动一个新工作人员,但是,我只是想运行每个 worker_thread 启动一次,直到我可以调试它的其余部分。

所以,我的问题是:

  • 为什么它不尝试输出似乎表明的所有破解尝试?
  • 如何使输出与尝试时实际尝试的内容保持一致?
0 投票
0 回答
23 浏览

node.js - 为什么工作线程中的同步代码不同?

为什么相同的同步代码在工作线程中运行时会得到不同的结果?当我从工作线程文件调用时,日志会延迟。

主文件:

服务文件:

当我单独运行 service.js 时的结果:

我运行 main.js 时的结果:

为什么该日志中的第 5 行和第 6 行等待完整的 8 秒才出现,而它们本应在 3 秒后出现?

0 投票
0 回答
29 浏览

javascript - 无法在 node-worker-thread-pool 中导入模块

我正在使用 node-worker-thread-pool 包。我无法将某些节点模块导入到我的 worker.ts 中,出现错误 SyntaxError: Cannot use import statement outside a module。如何解决这个问题。是否有任何其他包可以提供帮助,因为我的工作线程任务有其他导入/模块依赖项?

0 投票
0 回答
13 浏览

node.js - worker_threads 模块未与 PM2 一起运行

我正在使用 Express,从内部app.js调用一个工作线程,该线程位于另一个名为service.js. 当我通过正常运行它时,一切运行顺利node app.js,但是一旦我切换到 PM2,pm2 start app.js什么都没有发生。它甚至不会尝试调用该service.js文件。我在Ubuntu 18.04 上运行节点 v17.4.0。对可能发生的事情有任何想法吗?

应用程序.js

服务.js

0 投票
0 回答
25 浏览

node-worker-threads - Node-API 持久化大对象以便与工作人员快速共享

我想要一个 node.js 架构,其中有一个主线程创建一个大对象,然后生成多个工作线程/线程来处理该对象。

我尝试在创建时将对象传递给工人,但这非常慢。
我猜是因为对象被序列化然后反序列化并且由于它的大小需要很长时间。

是否可以使用 Node-API 或 Node 插件,在其范围内持久化在 main 中创建的大对象,然后使其可供其他工作人员使用?

我正在尝试创建一些 Node-API 代码以具有存储大对象的“set”方法和用于工作人员获取大对象的“get”方法。它正在编译但无法正常工作。

0 投票
1 回答
13 浏览

node.js - 在 Node.js 中触发 worker_thread OOM 异常的最佳方法

我想测试报告worker_thread OOM 时的代码。或者至少尽管线程由于 OOM 原因而崩溃,但父级是好的。我想专门测试 Node.js 杀死一个 worker_thread。

我什至不确定这是否特别可测试,因为运行 Node.js 的环境似乎有所不同。使用资源限制设置较低的老年代大小(docs)并不像我想象的那样,似乎 Node.js 和操作系统正在做很多聪明的事情来防止进程在内存中爆炸。我得到的最接近的是 Node.js 和工人都被杀死了。但同样,这不是我所期望的行为——Node.js 应该杀死工人。

有没有办法可靠地测试这样的事情?当前运行 v16.13.2。

[编辑]

这是工人的一些示例JS:

0 投票
0 回答
21 浏览

c++ - 如何从多个工作线程加载的节点插件共享 C++ 数据

标题可能有点混乱。我想做的是我有一个共享值,它需要作为节点本机插件的一部分共享。插件本身是上下文感知的,这意味着它可以从许多工作线程加载。所以我的问题是如何使对共享值的写入和读取操作是线程安全的。在这里,我提供了一个最小的项目来证明这一点。