问题标签 [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 - 是否可以为 NodeJS 工作线程构造函数使用字符串?
在 NodeJS 文档中,Worker 构造函数看起来需要一个包含要在新工作线程上执行的代码的文件的路径。
它是这样的:
我的问题是是否可以为 Worker 传递字符串而不是文件?我问的原因是由于我们的主应用程序是如何从其主机应用程序构建和启动的。
例如,是否可以做
如果是这样,我们如何处理多行字符串?
node.js - NodeJS 承诺睡眠时间太长
我正在尝试提高使用队列处理我的工作人员传入消息的性能。
但是,睡眠功能需要 16 到 30 毫秒才能完成,而不是 1 毫秒。有没有更好的方法来处理队列而不会有这么大的延迟,并且不会让我的应用程序保持 100% cpu?
我正在做这样的事情:
任何帮助,将不胜感激。谢谢!
typescript - worker_threads 中的 tsconfig 路径
我正在启动一些节点工作人员,并且需要每个工作人员从 tsconfig 的路径编译器选项中表示的路径中提取代码。您如何配置工作人员以确认来自 tsconfig 的路径?
这是我创建 Worker 的方式:
这是我收到的错误:
这是我在 tsconfig.base.json 中的路径配置:
node.js - 为什么 Node.js 工作消息侦听器先打印,然后再打印另一个控制台
此代码运行两次,一次在主线程和工作线程上。
输出案例 1:
为什么console.log,不从else执行?
输出案例 2:
工人“消息”侦听器在大多数情况下如何首先执行日志?尽管每次登录后都会调用 postMessage 。
node.js - 使用 node.js 工作线程“横向扩展”socket.io
早在 node.js 添加工作线程之前,我就已经通过使用cluster 模块“扩展”了单线程 socket.io 应用程序。
但是由于拥有多个进程涉及(在我的情况下)大量使用 IPC,将相同的高带宽数据复制到所有工作人员会导致大量开销。所以相反 - socket.io 是否可以使用工作线程?目标是使用不止一个核心。
我可以想到两种可能的方法:
- 拥有多个完全独立的 socket.io 实例,每个实例都在自己的工作线程上运行(例如,每个实例都服务于不同的 tcp 端口——这就是我当前的集群解决方案的工作方式)
- 有一个 socket.io 实例在内部使用多个线程(在这种情况下,它可能必须做类似 epoll 的事情 - 所以我有点怀疑 socket.io 有这个内置的)
注意 由于工作线程应该用于执行 CPU 密集型 JavaScript 操作,因此从多进程切换到多线程可以获得多少收益还有待观察。但总的来说,我不希望进程内通信比进程间通信慢。此外,在工作线程的情况下,数据可以共享(而不是复制)。
node.js - 有没有办法使用工作线程运行本机代码模块?
是否可以在工作线程上使用本机代码模块?
我正在创建每个工作线程,如图所示:
...这似乎工作得很好。启动单个工作线程没有问题。
但是,当创建多个工作人员时,会返回此错误:
这是在第二个线程上需要“erlpack”模块的结果。
在搜索了这个问题的解决方案后,似乎我并不是唯一一个在多个线程上使用包含本机代码的模块时遇到困难的人。
我已经尝试重建模块,重新安装模块,甚至需要文件中的模块来创建工作人员并通过“workerData”传递它(这不起作用)。我还在不同的设备上尝试过,运行不同的操作系统(Ubuntu 和 Windows),并将binding.gyp
该模块文件中的“win_delay_load_hook”选项设置为“true”。
不幸的是,我找不到任何可行的解决方案。
甚至有可能做到这一点吗?或者有没有另一种方法来创建多个进程,同时能够将数据传递到每个进程中,这也允许使用本机代码模块?
node.js - 工作代码完成后NodeJS没有代码运行
我的工作人员代码有问题,目前我有一些代码可以扫描两个数据库表并找到一些匹配项,然后将一些数据从一个表添加到另一个创建一个新表。这是一大组数据,所以我使用工作线程来加快速度。
这一切都很好,但是一旦工作线程完成,没有其他代码运行我已经尝试在LogData
任何地方添加该函数并且它不会运行我什至添加了console.log("Finished building merge table")
并且它也不会运行。即使parentResolve
确实发生了,因为我没有看到该console.log("parentResolve")
消息。
如果有人可以帮助我,我将不胜感激。
node.js - 如何将 socket.io 与 node.js worker_threads 一起使用
目前我正在介绍worker_threads
我正在开发的游戏。Thea 的想法是将每个游戏室放在一个单独的线程中,以便可以并行处理它们(是的,我知道只有在线程数不超过内核数的情况下才会真正发生这种情况)。
但是,我无法socket.io
使用worker_threads
. 到目前为止,我已经尝试了以下方法:
1.在socket.io
服务器内创建服务器:
服务器.js
server-worker.js
这会导致浏览器记录以下内容:
GET http://localhost:8080/socket.io/?EIO=3&transport=polling&t= 404 (Not Found)
此外,即使我让 Express 将轮询请求转发给工作人员,我猜我也无法打开多个房间,因为端口已经在使用中。
2.在主线程中创建socket.io
实例并传递它
服务器.js
但是,这不起作用,因为我得到了一个DataCloneError
,因为 worker_threads 只能将本机对象发送给工作人员。
问题:
- 有没有更简单的方法来完成我正在做的事情?即:我只是使用了错误的框架吗?
- 有没有办法
socket.io
使用线程?我已经看到了有关使用 Redis 实例将它与 node.js 集群一起使用的文档,但这对于手头的问题来说似乎有点过分了,因为我没有多个进程/节点。
javascript - 工作线程立即退出
我想在工作线程中运行阻塞任务以避免阻塞事件循环。我有两个环境,我的工作站和服务器。两者都有相同版本的 NodeJS (14.16.1)。
这是我的代码示例:
在我的工作站上,一切正常(我得到WORKER RESPONSE
了输出)。在服务器上,工作人员立即退出(我得到WORKER EXIT 0
)
这两个文件具有相同的权限。
什么可能导致这种行为?为什么工作线程会立即退出?
node.js - 使用'http'/'https'模块的NodeJS(Typescript ES2020)中的并行HTTPs(出站)GET请求
我正在尝试使用 NodeJS worker_threads 发出并行 HTTPs 请求。除了https.get()
函数之外,一切都并行工作。它阻止其余的请求。这是我到目前为止所尝试的。
代码正在运行,但 HTTP 请求是同步发出的,等待彼此。非常感谢任何帮助。
请不要建议任何第 3 方模块。我正在使用带有 target =“es2020”和 lib = [“es2020”] 的 Typescript v4.3.4。
提前致谢。