Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – I / O绑定和CPU绑定大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
喜.

我正在使用带有child_process的Node.JS来生成bash进程.我试图理解我是在做I / O绑定,cpu绑定还是两者兼而有之.

我正在使用pdftotext提取10k文件的文本.为了控制并发,我正在使用async.

码:

let spawn = require('child_process').spawn;
let async = require('async');
let files = [
  {
    path: 'path_for_file'
    ...
  },...
];
let maxnumber = 5;

async.mapLimit(files,maxnumber,(file,callBACk) => {
  let process = child_process.spawn('pdftotext',[
    "-layout","-enc","UTF-8",file.path,"-"
  ]);
  let result = '';
  let error = '';

  process.stdout.on('data',function(chunk) {
    result += chunk.toString();
  });

  process.stderr.on('error',function(chunk) {
    error += chunk.toString();
  });

  process.on('close',function(data) {
    if (error) {
      return callBACk(error,null);
    }
    callBACk(null,result);
  });


},function(error,files) {
  if (error) {
    throw new Error(error);
  }

  console.log(files);
});

我正在监视我的Ubuntu用法,当我运行程序时,我的cpu和内存非常高,有时我看到一次只处理一个文件,这是正常的吗?可能是什么问题呢??

我试图理解child_process的概念. pdftotext是Node.JS的子进程吗?所有子进程只在一个核心中运行?而且,我怎样才能让我的计算机处理文件变得更加柔和?

扫视器的酷图像:

node.js – I / O绑定和CPU绑定

由于child_process的问题,这是Node.JS的用法吗?

@L_197_14@

谢谢.

解决方法

如果您的作业处于cpu饥饿状态,那么要运行的最佳作业数通常是核心数(如果cpu具有超线程,则为两倍).因此,如果您有一台4核机器,您通常会通过并行运行4个作业来看到最佳速度.

但是,现代cpu严重依赖于缓存.这使得难以预测并行运行的最佳作业数.从磁盘中减少延迟,这将使其变得更加困难.

我甚至在核心共享cpu缓存的系统上看到了作业,并且在一次运行单个作业的速度更快 – 仅仅因为它可以使用完整的cpu缓存.

由于这种经验,我的建议一直是:措施.

因此,如果要运行10k个作业,则尝试并行运行具有不同作业数的100个随机作业,以查看最佳数量.随机选择很重要,因此您还可以测量磁盘I / O.如果文件大小差异很大,请运行几次测试.

find pdfdir -type f > files
mytest() {
  shuf files | head -n 100 |
    parallel -j $1 pdftotext -layout -enc UTF-8 {} - > out;
}
export -f myTest
# Test with 1..10 parallel jobs. Sort by JobRuntime.
seq 10 | parallel -j1 --joblog - myTest | sort -nk 4

不要担心您的cpu以100%运行.这只是意味着你得到了你在电脑商店花的所有钱的回报.

如果磁盘缓存不足,你的RAM只是一个问题(在你的屏幕截图中754M不低.当它达到< 100M时它很低),因为这可能会导致你的计算机开始交换 - 这可能会使它慢慢爬行.

大佬总结

以上是大佬教程为你收集整理的node.js – I / O绑定和CPU绑定全部内容,希望文章能够帮你解决node.js – I / O绑定和CPU绑定所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:jso绑定