यह सिस्टम स्तर अनुकूलन के संबंध में एक वैचारिक क्वेरी है। नोडजेएस दस्तावेज़ीकरण को पढ़कर मेरी समझ यह है कि पाइप धाराओं पर प्रवाह नियंत्रण करने के लिए आसान हैं।क्या .pipe() node.js में एक memcpy निष्पादित करता है?
पृष्ठभूमि: मेरे पास माइक्रोफ़ोन स्ट्रीम आ रही है और मैं समग्र सिस्टम एमआईपीएस को बचाने के लिए एक अतिरिक्त प्रतिलिपि ऑपरेशन से बचना चाहता था। मैं समझता हूं कि ऑडियो स्ट्रीम के लिए यह एमआईपीएस का एक बड़ा सौदा नहीं है, भले ही हुड के नीचे एक मेमकोपी हो, लेकिन मेरे पास 30fps और UHD रिज़ॉल्यूशन पर कैमरे के फ्रेम में स्ट्रीम करने की योजना भी है। 30 एफपीएस पर यूएचडी रिज़ॉल्यूशन पिक्सेल डेटा की कई प्रतियां बनाना बेहद अक्षम है, इसलिए इसके आसपास कुछ सलाह चाहिए।
उदाहरण कोड:
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;
यहाँ प्रश्न हैं:
- प्रवाह नियंत्रण प्रदर्शन करने में सक्षम होने के लिए, source.pipe (गंतव्य) के लिए स्रोत स्मृति से एक memcpy प्रदर्शन करता है हुड के नीचे गंतव्य स्मृति या क्या यह गंतव्य में गंतव्य में संदर्भ पारित करेगा?
- टिप्पणी कोड में पासथ्रू क्लास इंस्टेंटेशन शामिल है - मैं वर्तमान में पासथ्रू को मेमकोपी का कारण बनता हूं, और इसलिए मैं पूरे सिस्टम में एक मेम्पी ऑपरेशन सहेज रहा हूं क्योंकि मैंने उपरोक्त टिप्पणियों में जोड़ा है?
- अगर मुझे प्रक्रिया और स्पॉन्डेड चाइल्ड प्रक्रिया के बीच एक पाइप बनाना था (How to transfer/stream big data from/to child processes in node.js without using the blocking stdio? में दिखाए गए अनुसार child_process.spawn() का उपयोग करके, मुझे लगता है कि निश्चित रूप से memcpy में परिणाम होता है? क्या प्रतिलिपि बनाने के बजाए संदर्भ बनाने के लिए वैसे भी है?
- क्या यह व्यवहार ओएस से ओएस तक भिन्न है? मुझे लगता है कि यह ओएस अज्ञेयवादी होना चाहिए, लेकिन वैसे भी यह पूछना चाहिए।
आपकी सहायता के लिए अग्रिम धन्यवाद। यह मेरे वास्तुकला को एक बड़ा सौदा करने में मदद करेगा।