Dies ist eine konzeptionelle Abfrage bezüglich der Optimierung auf Systemebene. Mein Verständnis durch das Lesen der NodeJS-Dokumentation ist, dass Pipes praktisch sind, um die Flusskontrolle in Streams durchzuführen.Führt die .pipe() -Memcpy in node.js aus?
Hintergrund: Ich habe Mikrofonstrom kommen und ich wollte eine zusätzliche Kopie vermeiden, um MIPS Gesamtsystem zu erhalten. Ich verstehe, dass dies für Audiostreams nicht sehr viel MIPS ist, selbst wenn es eine Memcopy unter der Haube gab, aber ich habe auch eine Erweiterung geplant, um in Kamerarahmen mit 30 fps und UHD-Auflösung zu streamen. Das Erstellen mehrerer Kopien von Pixeldaten mit UHD-Auflösung mit 30 fps ist sehr ineffizient.
Beispielcode:
var spawn = require('child_process').spawn
var PassThrough = require('stream').PassThrough;
var ps = null;
//var audioStream = new PassThrough;
//var infoStream = new PassThrough;
var start = function() {
if(ps == null) {
ps = spawn('rec', ['-b', 16, '--endian', 'little', '-c', 1, '-r', 16000, '-e', 'signed-integer', '-t', 'raw', '-']);
//ps.stdout.pipe(audioStream);
//ps.stderr.pipe(infoStream);
exports.audioStream = ps.stdout;
exports.infoStream = ps.stderr;
}
};
var stop = function() {
if(ps) {
ps.kill();
ps = null;
}
};
//exports.audioStream = audioStream;
//exports.infoStream = infoStream;
exports.startCapture = start;
exports.stopCapture = stop;
Hier sind die Fragen:
- der Lage sein, Flusskontrolle durchzuführen, funktioniert die source.pipe (DEST) führt eine Memcpy aus dem Quellenspeicher an den Zielspeicher unter der Haube ODER würde es die Referenz im Speicher an das Ziel übergeben?
- Der kommentierte Code enthält eine PassThrough-Klasseninstanziierung - ich gehe derzeit davon aus, dass PassThrough auch Memcopies verursacht, und deshalb speichere ich eine Memcpy-Operation im gesamten System, weil ich die obigen Kommentare hinzugefügt habe?
- Wenn ich eine Pipe zwischen einem Prozess und einem gestützten untergeordneten Prozess (mit child_process.spawn() wie in How to transfer/stream big data from/to child processes in node.js without using the blocking stdio? gezeigt) erstellen musste, nehme ich an, dass definitiv in memcpy resultiert? Gibt es überhaupt eine Referenz, anstatt zu kopieren?
- Unterscheidet sich dieses Verhalten von Betriebssystem zu Betriebssystem? Ich nehme an, es sollte OS-agnostisch sein, aber frag es trotzdem.
Vielen Dank im Voraus für Ihre Hilfe. Es wird meiner Architektur sehr helfen.