大佬教程收集整理的这篇文章主要介绍了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的子进程吗?所有子进程只在一个核心中运行?而且,我怎样才能让我的计算机处理文件变得更加柔和?
扫视器的酷图像:
由于child_process的问题,这是Node.JS的用法吗?
@L_197_14@
谢谢.
但是,现代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,请注明来意。