问题标签 [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 投票
3 回答
179 浏览

node.js - 请求未分布在其工作进程中

我只是在试验工作进程,因此试试这个:

我使用loadtest来检查“请求是否分布在他们的工作进程中?” 但我也一样process.pid

即使我杀了他们中的一个,我也会得到同样的结果process.pid

process.pid当我杀死它时,我怎么变得一样了?为什么我的请求没有分布在他们的工作进程中?

即使我使用pm2来测试集群情绪,使用:

因为loadtest -n 50000 http://localhost:3000我检查了 pm2 监视器:

但令人惊讶的是,app1 和 app2 从未收到任何请求,也没有显示任何应用程序日志。

更新 1

我仍然想不出任何解决方案。如果有任何进一步的查询需要,请询问。我第一次遇到这个问题。这就是为什么我可能无法表示确切的问题发生在哪里。

更新 2

得到一些答案后,我尝试用一​​个简单的节点服务器再次测试它:

在没有任何配置的情况下使用 pm2:

gif1

使用@Naor Tedgi 的回答中建议的配置:

gif1

现在服务器根本没有运行。

0 投票
1 回答
994 浏览

node.js - 如何为 puppeteer 使用工作线程以实现 Web 自动化的多线程

你好,所以我正在做一些网络自动化,我想打开运行 puppeteer 多线程我的意思是打开同一个页面 10 次,我理解我读到的工作线程是我猜的最好的解决方案?但我不知道如何正确使用它,我会放一个我所做的示例代码

这个脚本打开了 4 个浏览器,但是如果我打开更多的 pc 延迟很多, 因为我认为它只使用一个线程而不是全部使用它们?提前谢谢你,对不起我的愚蠢

0 投票
0 回答
389 浏览

javascript - 将数据从承诺传递到工作线程

嗨,我在将数据从承诺传递到工作线程时遇到问题。

我想将“数据”传递给工作线程并从工作线程传递给主线程。

我收到此错误:UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]:“数据”参数必须是字符串类型或 Buffer、TypedArray 或 DataView 的实例。收到未定义。

下面是我的代码:

0 投票
1 回答
509 浏览

javascript - 在 JS (Node.js) 中同时管理多个长时间运行的任务

Golang 开发者在这里,尝试学习 JS (Node.js)。

我习惯于在 Go 中使用 goroutine,为了简单起见,我们假设它们只是线程(实际上它们并不完全是线程,更像是Green Threads,但请耐心等待!)。

现在想象一下,我想创建某种可以运行某些服务的服务,endlessTask例如,它可以是一个从 websocket 接收数据并保持内部状态更新的函数,以后可以查询。现在,我希望能够同时为多个用户提供服务,并且每个用户还可以在某个时候停止他们正在进行的特定任务。在 Go 中,我可以为 my 生成一个 goroutine,endlessTask在请求调度程序中存储某种会话,以跟踪每个任务属于哪个用户。

我怎样才能在 JS 中实现这样的东西?我浏览了 Node.js API 文档,发现了一些有趣的东西:

  • 集群:似乎不是我正在寻找的
  • 子进程:可以工作,但我会为每个客户端/用户生成 1 个进程,我认为开销会很大
  • Worker 线程:更像是它,但文档指出它们“对于执行 CPU 密集型 JavaScript 操作很有用”和“Node.js 内置的异步 I/O 操作比 Worker 更有效”

我不确定在没有多线程或多处理的情况下如何处理这种情况。在这种情况下,工作线程解决方案是否可行?

任何意见或建议将不胜感激。谢谢!

0 投票
2 回答
761 浏览

node.js - Nodejs 工作线程 - 我应该在池中生成多少个工作线程?

我想使用 Nodejs Worker 线程来处理 CPU 密集型任务。我将为此创建一个可用的工人池。

我的问题是:我应该在池中生成多少工人?

假设我有 4 核 8 线程 cpu - 我应该生成最多 3 或 7 名工作人员(基于内核或线程)吗?我假设我必须为主进程保留 1 个核心/线程。

0 投票
1 回答
182 浏览

javascript - 在 Node JS 中,我有一个无法解析的异步操作。如何使用工作线程中止它?

假设我有一个像这样的异步操作:

假设 longTask 是不可预测的。它挂起并且有时无法解决。

我知道我们不能仅仅中止异步操作。

我查看了工作线程,以便我可以生成一个工作人员来运行此异步操作并在需要时终止它。

不幸的是,当我尝试它时,整个程序都退出了。

有没有办法让我中止/终止/取消/杀死工作线程并删除异步操作,而不退出节点应用程序?

谢谢你的时间。

0 投票
0 回答
116 浏览

javascript - 如何在不影响实例/网络速度的情况下打开多个 puppeteer 实例

所以我正在为一些我想同时打开多个(6-10)实例的网站进行自动化,为此我正在使用工作线程来做这件事,但问题是我打开的实例越多,它变得越慢是正常的或者可以修复

并且正在使用代理每个实例都有它自己的代理代码:

非常正常的东西和工作线程代码

0 投票
1 回答
530 浏览

node.js - 我可以在工作线程中使用节点 http 服务器吗

我知道集群模块,但对 worker_threads 有疑问。

代码示例

当我在 Windows 上运行此代码时,出现明显错误

但它在 WSL 上没有错误

但是在浏览器中,我总是只能从单个工作人员那里得到响应,这取决于他们开始的顺序

我可以在工作线程中监听单个 http 端口吗?如果是,如何在此端口上进行负载平衡?为什么 nodejs 允许在 WSL 上监听相同的端口?

0 投票
0 回答
73 浏览

node.js - 是否可以在 NodeJs 中同时使用工作线程 + GPU.js?

我正在尝试构建一个 web 应用程序,其中Node.js作为后端需要进行矩阵计算。随着数据集的增长,计算量可能会很大。

谷歌搜索后,我发现节点工作线程可能是必须的,因为 NodeJS 是事件驱动的,这意味着如果一个计算任务花费的时间太长,那么它可能会阻塞整个应用程序。同时,我发现GPU.js能够使用 GPU 加速计算。

那么是否有可能在 Node.js 中将工作线程与 gpu.js 一起使用以最终提高性能?或者这个想法是错误的还是不切实际的?

0 投票
1 回答
228 浏览

javascript - 是否有必要将 TensorFlow.js 计算放在 Node.js 工作线程中?

@tensorflow/tfjs-node我的问题是将 TensorFlow.js 计算(使用)移动到 Node.js 中的工作线程是否是个好主意。这个问题归结为使用原生后端运行 TensorFlow 计算时主线程被阻塞到什么程度的问题。

据我了解,如果我使用完全 JavaScript 版本的 TensorFlow ( @tensorflow/tfjs) 和 call model.fit(x, y, options),适合模型的计算实际上发生在 JavaScript 主线程上。更准确地说,model.fit返回 a Promise,因此计算在微任务中异步执行,但这些仍在主线程上运行。这些微任务在某种意义上是阻塞的,例如事件处理程序的执行需要等待微任务队列清空。因此,在这种情况下,将计算转移到 Web Worker 以避免在计算正在进行时阻塞主线程是有意义的。

但是,如果我使用原生版本的 TensorFlow ( @tensorflow/tfjs-node),“真正的工作”是在原生代码中进行的。这是我不知道的两件事,这使我无法回答标题中的问题:

  1. 背后的计算是否model.fit与主 JS 线程在同一线程上运行?
  2. 不管 1 的答案如何,我们仍然有与model.fit. 在微任务队列中发生这种情况是否会阻止其他事件被处理,直到微任务队列为空?

这是我要问的一个示例:假设我有一个发送和接收 socket.io 消息的 Node.js 应用程序。其中一条消息是拟合 TensorFlow.js 模型的请求;当应用程序收到此消息时,它会调用model.fit(x, y, options). 假设我没有将 TensorFlow 计算放在工作线程中,那么在计算进行时,应用程序是否还能回复来自服务器的 socket.io ping 消息?