gpt4 book ai didi

javascript - NodeJS 中将产生的线程数

转载 作者:行者123 更新时间:2023-12-05 00:30:01 24 4
gpt4 key购买 nike

我试图了解 NodeJS 中 worker 的工作。
我的理解是每次我们生成一个 worker 时,它都会创建一个带有自己的 Node/V8 实例的新线程。

那么下面的代码会产生 50 个线程吗?

它是如何分布在 cpu 核心上的?

这是 index.js

const { Worker } = require("worker_threads");
var count = 0;

console.log("Start Program");

const runService = () => {
return new Promise((resolve, reject) => {
const worker = new Worker("./service.js", {});
worker.on("message", resolve);
worker.on("error", reject);
worker.on("exit", code => {
if (code != 0) {
reject(new Error("Worker has stopped"));
}
});
});
};

const run = async () => {
const result = await runService();
console.log(count++);
console.log(result);
};

for (let i = 0; i < 50; i++) {
run().catch(error => console.log(error));
}

setTimeout(() => console.log("End Program"), 2000);

这是 service.js 文件
const { workerData, parentPort } = require("worker_threads");

// You can do any heavy stuff here, in a synchronous way
// without blocking the "main thread"
const sleep = () => {
return new Promise(resolve => setTimeout(() => resolve, 500));
};
let cnt = 0;
for (let i = 0; i < 10e8; i += 1) {
cnt += 1;
}
parentPort.postMessage({ data: cnt });

最佳答案

So will the below code spawn 50 threads?

....

for (let i = 0; i < 50; i++) {
run().catch(error => console.log(error));
}


是的。

How is it distributed over the cpu cores?



操作系统会处理这个。

根据操作系统,有一个名为 processor affinity 的功能。允许您手动设置任务对 CPU 内核的“亲和力”或偏好。在许多操作系统上,这只是一个提示,如果需要,操作系统会覆盖您的偏好。一些实时操作系统将此视为强制性的,允许您更好地控制硬件(在为自动驾驶汽车或工厂机器人编写算法时,您有时不希望操作系统随机控制您精心制作的软件)。

某些操作系统(如 Linux)允许您使用命令行命令设置处理器亲和性,以便您可以轻松编写 shell 脚本或使用 child_process微调你的线程。目前没有内置的方法来管理工作线程的处理器亲和性。我知道有一个第三方模块可以在 Windows 和 Linux 上执行此操作: nodeaffinity但它不适用于 Max OSX(以及其他操作系统,如 BSD、Solaris/Illumos 等)。

关于javascript - NodeJS 中将产生的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60483295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com