我有一个专用的服务器,每个核心具有2.5GHz的处理能力。
我在Node.js
18和pm2
上运行了一个测试来检查处理速度,如下所示:
function summBrute(k) {
const arr = [75, 283, 361, 168, 23, 489, 421, 95, 72, 380, 384, 470, 235, 465, 276, 26, 364, 416, 373, 184, 211, 239, 485, 18, 19, 252, 447, 6, 291, 324, 497, 352,
458, 201, 238, 116, 333, 163, 207, 417, 340, 431, 5, 269, 258, 178, 182, 295, 257, 434, 37, 372, 154, 223, 313, 80, 71, 229, 379, 181, 396, 281, 491, 58, 254,
359, 79, 175, 143, 214, 217, 148, 393, 246, 34, 166, 251, 381, 413, 180, 338,
442, 494, 378, 123, 118, 395, 446, 459, 472, 457, 51, 127, 351, 389, 157, 260,
370, 405, 346
];
let sum;
for(let i = 0; i < k; i++) {
sum += arr.reduce((partialSum, a) => partialSum + a, 0);
}
return sum;
}
setInterval(() => {
var t0 = performance.now();
summBrute(200000);
var t1 = performance.now();
console.log("Took Time:: " + (t1 - t0) + " milli");
}, 1000);
平均执行70毫秒。
问题是,当我使用相同的函数来测试在同一台10个核心的服务器上的执行速度时,它没有改变执行时间。
4个内核多了,但执行时间仍然是70毫秒???
怎么可能?
1条答案
按热度按时间lb3vh1jj1#
默认情况下,在Node.js中运行的JavaScript代码只在一个线程¹上运行,因此一次只运行一个内核,而不管系统有多少个内核。(在Node.js文档here中有一点关于这方面的内容。)要利用多个核心,您需要使用worker threads和/或child processes(或者,我想,多个Node.js进程-例如,集群)。
<$(尽管Node.js本身可能会使用其他几个来进行内务处理)