问题标签 [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.
node.js - 请求未分布在其工作进程中
我只是在试验工作进程,因此试试这个:
我使用loadtest来检查“请求是否分布在他们的工作进程中?” 但我也一样process.pid
即使我杀了他们中的一个,我也会得到同样的结果process.pid
process.pid
当我杀死它时,我怎么变得一样了?为什么我的请求没有分布在他们的工作进程中?
即使我使用pm2来测试集群情绪,使用:
因为loadtest -n 50000 http://localhost:3000
我检查了 pm2 监视器:
但令人惊讶的是,app1 和 app2 从未收到任何请求,也没有显示任何应用程序日志。
更新 1
我仍然想不出任何解决方案。如果有任何进一步的查询需要,请询问。我第一次遇到这个问题。这就是为什么我可能无法表示确切的问题发生在哪里。
更新 2
得到一些答案后,我尝试用一个简单的节点服务器再次测试它:
在没有任何配置的情况下使用 pm2:
使用@Naor Tedgi 的回答中建议的配置:
现在服务器根本没有运行。
node.js - 如何为 puppeteer 使用工作线程以实现 Web 自动化的多线程
你好,所以我正在做一些网络自动化,我想打开运行 puppeteer 多线程我的意思是打开同一个页面 10 次,我理解我读到的工作线程是我猜的最好的解决方案?但我不知道如何正确使用它,我会放一个我所做的示例代码
这个脚本打开了 4 个浏览器,但是如果我打开更多的 pc 延迟很多, 因为我认为它只使用一个线程而不是全部使用它们?提前谢谢你,对不起我的愚蠢
javascript - 将数据从承诺传递到工作线程
嗨,我在将数据从承诺传递到工作线程时遇到问题。
我想将“数据”传递给工作线程并从工作线程传递给主线程。
我收到此错误:UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]:“数据”参数必须是字符串类型或 Buffer、TypedArray 或 DataView 的实例。收到未定义。
下面是我的代码:
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 更有效”
我不确定在没有多线程或多处理的情况下如何处理这种情况。在这种情况下,工作线程解决方案是否可行?
任何意见或建议将不胜感激。谢谢!
node.js - Nodejs 工作线程 - 我应该在池中生成多少个工作线程?
我想使用 Nodejs Worker 线程来处理 CPU 密集型任务。我将为此创建一个可用的工人池。
我的问题是:我应该在池中生成多少工人?
假设我有 4 核 8 线程 cpu - 我应该生成最多 3 或 7 名工作人员(基于内核或线程)吗?我假设我必须为主进程保留 1 个核心/线程。
javascript - 在 Node JS 中,我有一个无法解析的异步操作。如何使用工作线程中止它?
假设我有一个像这样的异步操作:
假设 longTask 是不可预测的。它挂起并且有时无法解决。
我知道我们不能仅仅中止异步操作。
我查看了工作线程,以便我可以生成一个工作人员来运行此异步操作并在需要时终止它。
不幸的是,当我尝试它时,整个程序都退出了。
有没有办法让我中止/终止/取消/杀死工作线程并删除异步操作,而不退出节点应用程序?
谢谢你的时间。
javascript - 如何在不影响实例/网络速度的情况下打开多个 puppeteer 实例
所以我正在为一些我想同时打开多个(6-10)实例的网站进行自动化,为此我正在使用工作线程来做这件事,但问题是我打开的实例越多,它变得越慢是正常的或者可以修复
并且正在使用代理每个实例都有它自己的代理代码:
非常正常的东西和工作线程代码
node.js - 我可以在工作线程中使用节点 http 服务器吗
我知道集群模块,但对 worker_threads 有疑问。
代码示例
当我在 Windows 上运行此代码时,出现明显错误
但它在 WSL 上没有错误
但是在浏览器中,我总是只能从单个工作人员那里得到响应,这取决于他们开始的顺序
我可以在工作线程中监听单个 http 端口吗?如果是,如何在此端口上进行负载平衡?为什么 nodejs 允许在 WSL 上监听相同的端口?
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
),“真正的工作”是在原生代码中进行的。这是我不知道的两件事,这使我无法回答标题中的问题:
- 背后的计算是否
model.fit
与主 JS 线程在同一线程上运行? - 不管 1 的答案如何,我们仍然有与
model.fit
. 在微任务队列中发生这种情况是否会阻止其他事件被处理,直到微任务队列为空?
这是我要问的一个示例:假设我有一个发送和接收 socket.io 消息的 Node.js 应用程序。其中一条消息是拟合 TensorFlow.js 模型的请求;当应用程序收到此消息时,它会调用model.fit(x, y, options)
. 假设我没有将 TensorFlow 计算放在工作线程中,那么在计算进行时,应用程序是否还能回复来自服务器的 socket.io ping 消息?