首页 > 解决方案 > nodejs中线程的实现

问题描述

nodejs 在单线程上运行,当我异步读取文件时,nodejs 将在后台运行一个线程来读取该文件,我相信这个想法是使用尽可能多的 CPU 内核。

考虑以下片段,

fs.readdirSync('my/path', (err, files) => {
  if (err) throw err;
  for(let i=0; i<files.length; i++){
    fs.readFile(files[i], (err, data) => {
      if (err) throw err;
      console.log(data);
    });
  }
});

现在,假设没有。中的文件my/path数为 10。现在,由于 nodejs 为 eventloop 巧妙地使用了一个线程,因此剩下 7 个 CPU 内核。nodejs 将如何处理这个问题?nodejs 中是否有任何内部队列,还是纯粹的操作系统实现?

标签: node.jslibuv

解决方案


Node js的单进程将始终只使用一个内核来执行它的任务,对于异步行为(你提到的代码)和非阻塞I / O事件循环将利用内部内核级线程来工作,但作为单节点进程只有一个 CPU 内核处于活动状态。

为了使用机器的多核,您可以,

使用集群模块创建子服务器(进程)并将每个核心分配给它,否则您可以拥有多个 nodejs 进程,这些进程可以在没有核心的情况下增加。


推荐阅读