- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Node v10.16.3
我正在运行 worker_threads
来自 Node 官方文档的示例。为了测试共享变量,我做了一些更改。这是一个例子
工作线程.js
const {
Worker,
isMainThread,
parentPort,
workerData
} = require("worker_threads");
let a = 10;
if (isMainThread) {
module.exports = async function parseJSAsync(num) {
return new Promise((resolve, reject) => {
const worker = new Worker(__filename, {
workerData: num
});
worker.on("message", resolve);
worker.on("error", reject);
worker.on("exit", code => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
for (let i = 0; i < num; i++) {
console.log("master: ", a);
a++;
}
});
};
} else {
const num = workerData;
let result = 1;
for (let i = 1; i < num; i++) {
console.log("worker: ", a);
a--;
result = result * i;
}
parentPort.postMessage(result);
}
const calculateFactorial = require("./work-thread");
calculateFactorial(10).then(res => console.log("res", res));
a
主线程和工作线程都可以访问。
master: 10
master: 11
master: 12
master: 13
master: 14
master: 15
master: 16
master: 17
master: 18
master: 19
worker: 10
res 362880
worker: 9
worker: 8
worker: 7
worker: 6
worker: 5
worker: 4
worker: 3
worker: 2
最佳答案
看起来日志记录依赖于主线程,主线程被 for 循环阻塞,直到它完成。来自worker的日志似乎在worker中调用console.log时被缓冲,但直到主线程被解除阻塞才真正写出。所以工作是并行完成的,但不是日志记录。我还没有找到这方面的引用,但可以通过运行依赖于时间的示例来验证:
const {
Worker,
isMainThread
} = require('worker_threads');
if (isMainThread) {
console.log(`start time: ${Date.now()}`);
const worker = new Worker(__filename);
worker.on('exit', (code) => {
console.log(`exited with code [${code}]`);
});
worker.on('error', (err) => {
console.log(err);
});
// Block main thread for 10 seconds
const start = new Date();
while (true) {
const now = new Date();
if (now.getTime() - start.getTime() > 10000) {
console.log('brook loop');
break;
}
}
// Stop worker after another 10 seconds
setTimeout(() => worker.terminate(), 10000);
} else {
setInterval(() => console.log(Date.now()), 1000);
}
下面的输出(注释了一些关于时间的评论)
start time: 1600900685482 // written to console immediately
brook loop // written to console 10s later
1600900686512 // these 10 lines are written all at one as soon as the loop is broken. Note that even though they are written at once, the times are all 1 second apart.
1600900687515
1600900688517
1600900689518
1600900690519
1600900691520
1600900692524
1600900693525
1600900694526
1600900695527
1600900696533 // after dumping the backlog of log lines from while the main thread was blocked, new lines are now written every 1 second
1600900697536
1600900698539
1600900699540
1600900700544
1600900701550
1600900702550
1600900703556
1600900704558
exited with code [1]
关于node.js - Node worker_threads console.log 出现在 postMessage 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596200/
我正在尝试将 node.js 'worker_threads' 库与 Node v14.15.1 一起使用并收到此错误 Cannot find module 'worker_threads' or i
我清楚地看到了集群方法,因为它部署了不同的整个流程。而且我猜专业程序员出于某种充分的理由制作了“worker_threads”库......但我仍然需要澄清这一点以便我理解: 在正常的单线程进程中事件
我一直在阅读有关 NodeJS 上的多处理的文章,以获得最好的理解,并尝试使用我的代码在繁重的环境中获得良好的性能。 尽管我了解利用资源来处理负载的不同方式的基本目的和概念,但随着我的深入,一些问题出
我一直在思考如何优化 React 服务器端渲染,尤其是我应用程序中的瓶颈部分,即同步 renterToString 调用。因为这是一个阻塞调用,所以长函数 renderToString 调用会导致我的
我刚刚发现了 Node.js 的worker_threads 模块,它看起来很有前途! 问题:将worker_threads与集群结合起来是否有趣/高效,或者创建的线程是否自动分布在机器的不同CPU上
最近的 Node.js 版本包含新模块 worker_threads,据说它为 Node.js 带来了多线程。然而,它似乎在底层使用进程:https://nodejs.org/api/worker_t
我正在编写一个nodejs脚本。我使用worker_threads和BroadcastChannel创建了一个worker。我无法将消息从主线程发送到工作线程。但是,我可以从 Worker 向主线程发
我正在尝试在我的react-app 中使用“worker_threads”来进行一些CPU 密集型工作。但react-app在node.js库中找不到“worker_threads”。 这是我的代码:
感谢 NX,我有一个包含多个 next.js 应用程序的 monorepo 项目.运行命令时sudo npx nx serve appname在 Ubuntu WSL 上出现错误 Cannot fin
Node v10.16.3 我正在运行 worker_threads来自 Node 官方文档的示例。为了测试共享变量,我做了一些更改。这是一个例子 工作线程.js const { Worker,
我是否理解正确:如果我使用 cluster包,是不是意味着 为每个创建的 worker 创建一个新的 Node 实例? cluster有什么区别和 worker_threads包? 最佳答案 实际上,
ENV: Electron :v11.0.3 Node :v14.15.1 操作系统:win10 2020 x64 package.json - build "build":{ "productN
我是一名优秀的程序员,十分优秀!