node.js - 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 js的单进程将始终只使用一个内核来执行它的任务,对于异步行为(你提到的代码)和非阻塞I / O事件循环将利用内部内核级线程来工作,但作为单节点进程只有一个 CPU 内核处于活动状态。
为了使用机器的多核,您可以,
使用集群模块创建子服务器(进程)并将每个核心分配给它,否则您可以拥有多个 nodejs 进程,这些进程可以在没有核心的情况下增加。
推荐阅读
- c - Scanf 正在向数组寻址错误类型的变量
- javascript - 使用 CDN 时如何调用 react logger 函数
- html - 将一个固定的“箭头”元素居中于另一个固定的“圆形”元素中
- d3.js - 带有可扩展节点的图形,带有 D3
- r - 从 R 中具有 6 个未知数的 6 个非线性方程计算变量
- typescript - 在 Nest.js 中,如何在我的 API 响应中提供与我的 JSON 对象捆绑在一起的静态内容文件
- notepad++ - notepad++ 正则表达式删除标签内部/之间的空白空间并按字母顺序排序
- maven - 未能执行目标 org.scalatest:scalatest-maven-plugin:2.0.0:test (test)
- c++ - 这种右移是如何工作的:stringstream >> unsigned int >> unsigned int?
- javascript - XMLHttpRequest 中的超时和错误有什么区别?