में बड़ी सरणी पास करें मेरे पास जटिल सीपीयू गहन कार्य है जो मैं एक बड़े सरणी पर करना चाहता हूं। आदर्श रूप में, मैं इसे बाल प्रक्रिया में पास करना चाहता हूं।नोड बाल प्रक्रिया
var spawn = require('child_process').spawn;
// dataAsNumbers is a large 2D array
var child = spawn(process.execPath, ['/child_process_scripts/getStatistics', dataAsNumbers]);
child.stdout.on('data', function(data){
console.log('from child: ', data.toString());
});
लेकिन जब मैं करते हैं, नोड त्रुटि देता है:
spawn E2BIG
मैं तो बच्चे की प्रक्रिया के लिए डेटा पाइप भर में this article
आया जाने का रास्ता हो रहा है। मेरे कोड है:
var spawn = require('child_process').spawn;
console.log('creating child........................');
var options = { stdio: [null, null, null, 'pipe'] };
var args = [ '/getStatistics' ];
var child = spawn(process.execPath, args, options);
var pipe = child.stdio[3];
pipe.write(Buffer('awesome'));
child.stdout.on('data', function(data){
console.log('from child: ', data.toString());
});
और फिर getStatistics.js में:
console.log('im inside child');
process.stdin.on('data', function(data) {
console.log('data is ', data);
process.exit(0);
});
हालांकि process.stdin.on
में कॉलबैक पूरा नहीं हुआ है। मैं अपने बच्चे की स्क्रिप्ट में स्ट्रीम कैसे प्राप्त कर सकता हूं?
संपादित
मैं बफर दृष्टिकोण का परित्याग करने के लिए किया था। अब मैं एक संदेश के रूप सरणी भेज रहा:
var cp = require('child_process');
var child = cp.fork('/getStatistics.js');
child.send({
dataAsNumbers: dataAsNumbers
});
लेकिन यह केवल काम करता है जब dataAsNumbers की लंबाई लगभग 20,000 से नीचे है, अन्यथा यह समय समाप्त।
नोड इस प्रकार के काम के लिए सही उपकरण नहीं है। मैं आपको एक बहुप्रचारित भाषा का उपयोग करने की सलाह दूंगा। – arboreal84
परियोजना 90% पूर्ण है, मैं अब नोड से बदल नहीं रहा हूं। नोड – Mark
के साथ भारी CPU उपयोग को समझाते हुए बहुत से लेख हैं, आमतौर पर कोर समस्याओं को हल करने के लिए एक परियोजना शुरू करना एक अच्छा विचार है। एक बहुप्रचारित भाषा में आपको थ्रेड साझा स्मृति के बाद डेटा कॉपी करने की आवश्यकता नहीं होगी। इस मामले में डेटा की प्रतिलिपि सबकुछ धीमा कर देगी। इसके अलावा, जब आप libuv को काम सौंपते हैं तो नोड तेज़ होता है। यदि आप भारी प्रसंस्करण के लिए नोड के v8 भाग का उपयोग करने की योजना बना रहे हैं तो यह तेज़ नहीं होगा। इसके अलावा, अगर किसी भी कारण से यह वास्तविक सर्वर का हिस्सा है, तो आपका इवेंट लूप अवरुद्ध हो जाएगा और I/O आपके सभी अनुरोधों को समय निकाल देगा। – arboreal84