javascript - 如何从nodejs中的工作线程修改全局变量
问题描述
我最近遇到工作线程是nodejs中实现的一个新功能,但是似乎没有办法从工作线程访问和修改它,你知道有什么办法吗?
const { Worker, isMainThread, parentPort } = require('worker_threads');
global.myvar = "initial variable"
if (isMainThread) {
const worker = new Worker(__filename);
// Receive messages from the worker thread
worker.once('message', (message) => {
console.log(message + ' received from the worker thread!');
});
// Send a ping message to the spawned worker thread
worker.postMessage("");
setTimeout(function() {
console.log("final variable : " + global.myvar);
}, 2000);
} else {
// When a ping message received, send a pong message back.
console.log("inside worker thread");
parentPort.on('message', (message) => {
global.myvar = "worker variable"
});
}
在这段代码中,我希望最终的变量是 value "worker variable"
,但它显示"initial variable"
了,我可以知道如何解决这个问题吗?
解决方案
工作线程和主线程运行在完全独立的 JavaScript 环境中。他们每个人都有自己的一组全局变量,等等。
worker 不能直接修改父变量的内容。它需要通过消息向父级发送更新,父级将通过更新全局变量来处理该更新。
推荐阅读
- git - 如何在已经提交到其他分支的其他分支中推送更改
- php - PHP - sleep() 在时间过去后无法继续执行
- docker - Docker Swarm 和 Mesos 中的资源利用
- node.js - 如何查找数组中对象的计数,该数组是集合中所有 mongodb 文档中键的值
- twig - 在 opencart 3.0.2 的产品页面中使用 include disable 的添加到购物车按钮
- python - 将 Binarizer 中的阈值调整为 BernoulliNB() 分类器
- javascript - 我如何确保只能从电子窗口内部访问 Electron express 应用程序
- python - ValueError:检查输入时出错:预期 flatten_1_input 的形状为 (4, 4, 512) 但得到的数组的形状为 (128, 128, 3)
- php - 将 php 数组数据导出到 CSV 或 Excel
- javascript - Redux TypeError:无法读取未定义的属性“应用”