Hei.I/O gebunden und CPU gebunden
Ich verwende Node.JS
mit child_process
, um Bash-Prozesse zu spawnen. Ich versuche zu verstehen, ob ich I/O-gebunden, CPU-gebunden oder beides mache.
Ich benutze pdftotext, um den Text 10k + Dateien zu extrahieren. Um Übereinstimmungen zu kontrollieren, benutze ich async.
Code:
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);
});
Ich überwache meine Ubuntu-Nutzung und meine CPU und Speicher sind sehr hoch, wenn ich das Programm ausführen, und auch manchmal sehe ich nur eine Datei zu einem Zeitpunkt verarbeitet wird, ist dies normal?? Was könnte das Problem sein?
Ich versuche das Konzept von child_process zu verstehen. Ist pdftotext
ein Kindprozess von Node.JS
? Alle untergeordneten Prozesse werden nur in einem Kern ausgeführt? Und wie kann ich die Dateien für meinen Computer weicher machen?
Kühles Bild von Glancer:
Ist diese Verwendung von Node.JS wegen der child_process ist ??
Dank.
'pdftotext' scheint CPU-intensiv zu sein. Mit einer 2-Kern-Maschine können nur 2 CPU-gebundene Prozesse gleichzeitig auf Ihrem Rechner ausgeführt werden. Eine Möglichkeit, um mehr Fortschritte bei Ihrer Arbeit zu erzielen, besteht darin, nur "pdftotext" -Aufträge der CPU gleichzeitig zu erstellen. – dm03514
Ich denke, ich mache das mit async.eachLimit, ich spawning nur 5 Prozesse auf einmal, oder ich falsch liegen? –