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

javascript - 导入的函数在节点工作线程中不起作用,因为未加载依赖图

我正在尝试使用 Node 的worker_threadsusing node-worker-threads-pool包装器)包及其DynamicPool.

我的问题是,执行一个线程给一个具有imports 的函数将不起作用,因为该函数将是undefined.

这是特定问题 node-worker-threads-pool还是 Node问题worker_threads?您知道解决此问题的一些方法吗?

0 投票
1 回答
134 浏览

node.js - Worker 无法查询/访问 Mongoose 模型

我尝试直接在工人中导入猫鼬模型,例如:

查询未运行!但没有异常或错误

因此,我尝试从主线程将模型作为 WorkerData 传递:

这次我得到了例外:

我该怎么做才能从 Worker 线程访问数据库?

我应该使用 : 在线程中建立与数据库的单独连接 mongoose.connect()吗?

0 投票
1 回答
493 浏览

node.js - 有没有办法在 node js 的工作线程中使用 parentPort.on() 和 server.listen()

每当我尝试使用具有
Worker 文件的工人时 =>

主文件 =>

服务器已经在监听它给出了这个错误

我试过使用 MessageChannel() 但它也给出了同样的错误。请您告诉错误的原因是什么以及如何纠正它。

0 投票
2 回答
3611 浏览

node.js - 是否可以使用 Node 工作线程来执行数据库插入?

我最近阅读了 Node 的“worker_threads”模块,该模块允许在多个线程中并行执行 Javascript 代码,这对于 CPU 密集型操作很有用。(注意:这些不是 Chrome 在浏览器中制作的网络工作者)

我正在构建一个功能,我需要在不阻塞浏览器的情况下执行大量 Postgres INSERT。

问题是:在我实例化 worker 的 Javascript 文件中,我不允许导入任何内容,包括本地 Node 模块或 NPM 库(如 Knex.js),这是执行数据库查询所必需的。我收到一条错误消息:一旦执行文件,就无法在模块外部使用 import 语句。

我尝试将工作代码放在另一个文件中,并在顶部使用 import 语句(同样的错误)。我尝试将 Knex 对象提供给 workerData,但它无法克隆非本地 JS 对象。

我没有想法 - 如果我们无法导入任何 NPM 库,有谁知道如何在工作线程中与数据库交互?!?!

我正在关注此网页上的教程:https ://blog.logrocket.com/use-cases-for-node-workers/

0 投票
0 回答
227 浏览

node.js - 如何使用nodejs工作线程实现简单的消息队列?

我想使用 nodejs 工作线程实现简单的消息队列。其中一个nodejs工作线程将数据写入队列,当队列中有数据时,另一个工作线程获取该数据并处理数据。

0 投票
1 回答
49 浏览

javascript - Threads.js 中并发数和工作线程数之间的区别?

根据文档,产生的工人数量将等于 CPU 核心的数量。够直截了当。

根据文档,每个工作人员的默认并发性为 1。这就是我感到困惑的地方。我不明白将并发性增加到 1 以上会有什么价值。增加并发性与增加产生的工人数量有何不同?

您希望将并发设置为大于 1 的情况示例是什么?

0 投票
1 回答
1660 浏览

node.js - 如何在nodejs中监听来自worker的终止信号?

我有一个主进程,它使用worker_threads. 在某些特定情况下,主进程必须关闭该线程,而不管它是否完成了任务,因此 MainThread 使用terminate()来停止线程。但是,此线程会产生不同的依赖项,这些依赖项需要在退出之前关闭。这些依赖项必须从线程中关闭,所以我不能使用worker.on('exit'),因为它是在主进程上运行的。

是否有某种方法可以从工作人员本身监听终止?

我想要实现的一些最小示例。

0 投票
0 回答
413 浏览

node.js - TCP 服务器的多个套接字连接,如何在 Nodejs 中使用工作线程进行扩展

我有以下代码,因为有 N 个套接字发送顺序流。如何使用 nodejs 中的工作线程来扩展它。

0 投票
0 回答
254 浏览

node.js - Nodejs 和计算繁重的操作,通过工作线程最大限度地利用 cpu,同时仍然获得一些响应能力

我正在尝试以高性能的方式解决 nodejs 中的以下场景。

  • 我有一个价值 100Mb 的 jsons 需要处理,处理每个条目的时间函数约为O(sweet_jesus(n)). 实时每个条目大约需要 4-5 秒。
  • 我可以完全单独处理每个条目(总共大约 900 个条目)的唯一一线希望,它们是不相关的。

worker_threads我的第一选择是选择node-worker-threads-pool

上面的代码运行得很漂亮,它表明 I/O - 读取所有文件并将其提供给池 - 大约需要 5-6 秒...... 但之后与运行整个文件相比绝对没有任何区别一个线程。日志确实显示单个文件的处理不再像以前那样按顺序发生,所以我猜后台发生了一些线程,但总时间并没有改变一点。无论哪种方式都需要大约一个小时。此外,我的具有 6 个内核(12 个逻辑)的超线程 Intel 8750 显示 86% 的利用率用于节点进程。所以我所谓的 10 个独立线程甚至无法利用一个完整的核心。-编辑:我是个智障,我写错了时间确实有很大的不同......

在此之后,我将线程池大小增加到 100,并将文件数量减少到 100。这就是奇怪的事情开始发生的地方。首先,我所有的 CPU 内核都运行了 brrrr,并且我的笔记本电脑正确地从桌子上消失了,正如人们所期望的那样。操作系统提供零响应,一切都是幻灯片。前 20 个左右的文件在同一秒内得到处理,之后单个文件的处理时间约为 3 秒(彼此整齐地排列,一个消息在另一个消息之后 3-5 秒)。最后 10 个左右的文件在同一秒内再次得到处理。

  • 为什么 10 个线程与 1 个线程相比没有区别?
  • 我不应该看到要在集群中处理的文件,其中集群大小与逻辑核心的数量相当,而不是一个接一个的时间戳?
  • 有没有办法“离开”一个核心来处理其他事情,而计算仍然和所有其他核心一起去海王星?

编辑:我不会删除这个,也许有人会从中学习:) 所以回答我自己的问题:

  1. 它确实如此,我无法测量,无法写入,也无法读取我的 CPU 计量表……完全是我的错
  2. 这个我仍然没有完全理解,但是经过几次运行后,我怀疑当您启动整个对接负载的线程时,您会因为启动它们的压力而使整个系统挂起这么多,直到它能够吐出第一个日志,它已经完成了一堆计算。
  3. 是的,这也很明显,不要使用太多线程,以免线程管理本身会使操作系统陷入困境。

最后,顺便说一句,我用 11 个线程获得了最好的结果。

0 投票
2 回答
1841 浏览

node.js - 如何获取nodejs中worker_threads创建的worker的内存使用情况

我使用worker_threads 创建了一个worker。像这样:

而且我知道./path/to/a.jsWorker 有一点内存泄漏,所以当它泄漏很多时我必须破坏 Worker。如何获取 Worker 使用了多少内存?