क्या एक बार में कई तरीके चलाने के लिए धागे बनाने का कोई तरीका है?
इस तरह, यदि कोई भी विधि अन्य सभी धागों के बीच में विफल हो जाती है तो उसे मार दिया जाना चाहिए।
क्या एक बार में कई तरीके चलाने के लिए धागे बनाने का कोई तरीका है?
इस तरह, यदि कोई भी विधि अन्य सभी धागों के बीच में विफल हो जाती है तो उसे मार दिया जाना चाहिए।
जवाबों:
हर नोड.जेएस प्रक्रिया डिजाइन द्वारा एकल पिरोया गया है। इसलिए कई सूत्र प्राप्त करने के लिए, आपके पास कई प्रक्रियाएँ होनी चाहिए (जैसा कि कुछ अन्य पोस्टरों ने बताया है, ऐसे पुस्तकालय भी हैं जिनसे आप लिंक कर सकते हैं, जो आपको नोड में थ्रेड्स के साथ काम करने की क्षमता प्रदान करेंगे, लेकिन उन पुस्तकालयों के बिना ऐसी कोई क्षमता मौजूद नहीं है। । द्वारा शॉन विन्सेंट संदर्भित जवाब देखें https://github.com/audreyt/node-webworker-threads )
आप अपनी मुख्य प्रक्रिया से बाल प्रक्रियाएँ शुरू कर सकते हैं जैसा कि यहाँ दिखाया गया है। नोड्स दस्तावेज: http://nodejs.org/api/child_process.html । इस पृष्ठ पर उदाहरण बहुत अच्छे हैं और बहुत सीधे हैं।
आपकी मूल प्रक्रिया तब शुरू हुई किसी भी प्रक्रिया पर करीबी कार्यक्रम देख सकती है और फिर आप जिस अन्य प्रक्रिया को बंद करने की रणनीति की बात कर रहे हैं उसे प्राप्त करने के लिए शुरू की गई अन्य प्रक्रियाओं को बंद कर सकते हैं।
इसे भी देखें: मल्टी-कोर मशीनों पर Node.js
Node.js के भीतर से मूल थ्रेडिंग करने के लिए कम से कम एक लाइब्रेरी भी है: नोड-वेबवर्क-थ्रेड्स
https://github.com/audreyt/node-webworker-threads
यह मूल रूप से नोड के लिए वेब वर्कर ब्राउज़र एपीआई लागू करता है।
नोड 10.5 से अब बहु सूत्रण समर्थन है , लेकिन यह प्रयोगात्मक है । उम्मीद है कि यह जल्द ही स्थिर हो जाएगा।
निम्नलिखित संसाधनों की जाँच करें:
अपडेट :
नोड v11.7.0 आगे से, आपको --experimental-worker
ध्वज का उपयोग करने की आवश्यकता नहीं है ।
आप Napa.js. का उपयोग करके मल्टी-थ्रेडिंग प्राप्त कर सकते हैं
https://github.com/Microsoft/napajs
"नापा.जेएस V8 पर निर्मित एक बहु-थ्रेडेड जावास्क्रिप्ट रनटाइम है, जिसे मूल रूप से बिंग में गैर-समझौता किए गए प्रदर्शन के साथ अत्यधिक पुनरावृत्त सेवाओं को विकसित करने के लिए डिज़ाइन किया गया था। जैसा कि यह विकसित होता है, हम सीपीयू-बाउंड कार्यों में Node.js को पूरक करने के लिए उपयोगी पाते हैं। , कई V8 में जावास्क्रिप्ट को क्रियान्वित करने और उनके बीच संचार करने की क्षमता के साथ। नापा.जेएस को नोड.जेएस मॉड्यूल के रूप में उजागर किया जाता है, जबकि इसे बिना नोड के निर्भरता के एक मेजबान प्रक्रिया में भी एम्बेड किया जा सकता है। "
यदि आप Rx का उपयोग कर रहे हैं, तो समानांतर निष्पादन में काम को विभाजित करने के लिए rxjs-क्लस्टर में प्लगइन करना आसान है। (अस्वीकरण: मैं लेखक हूं)
मुझे Node.js में वास्तविक मल्टीथ्रेडिंग की आवश्यकता थी और जो मेरे लिए काम करता था वह थ्रेड पैकेज था। यह एक अन्य प्रक्रिया को जन्म देता है, यह स्वयं का Node.js संदेश लूप है, इसलिए वे एक दूसरे को ब्लॉक नहीं करते हैं। सेटअप आसान है और दस्तावेज़ीकरण आपको ऊपर और तेजी से चल रहा है। आपका मुख्य कार्यक्रम और कार्यकर्ता दोनों तरीकों से संवाद कर सकते हैं और ज़रूरत पड़ने पर कार्यकर्ता "धागे" को मार सकते हैं।
चूंकि मल्टीथ्रेडिंग और Node.js एक जटिल और व्यापक रूप से चर्चा का विषय है, ऐसे पैकेज को खोजना काफी कठिन था जो मेरी विशिष्ट आवश्यकता के लिए काम करता हो । रिकॉर्ड के लिए ये मेरे काम नहीं आए :
require
उन श्रमिकों के मॉड्यूल की अनुमति नहीं दी, जिनकी मुझे आवश्यकता थीऔर यह पूछने के लिए कि मुझे असली मल्टी-थ्रेडिंग की आवश्यकता क्यों है : रास्पबेरी पाई से जुड़े एक आवेदन के लिए और व्यवधान। एक धागा उन व्यवधानों को संभाल रहा है और दूसरा डेटा (और अधिक) के भंडारण का ख्याल रखता है।
नोड्ज 10.5.0 रिलीज़ ने नोड.जेएस में मल्टीथ्रेडिंग की घोषणा की है । सुविधा अभी भी प्रायोगिक है। अब एक नया कार्यकर्ता_थ्रेड्स मॉड्यूल उपलब्ध है।
यदि आप Node.js v10.5.0 या उच्चतर रन करते हैं, तो आप कार्यकर्ता थ्रेड का उपयोग करना शुरू कर सकते हैं , लेकिन यह एक प्रयोगात्मक एपीआई है । यह डिफ़ॉल्ट रूप से उपलब्ध नहीं है: आपको Node.js. को लागू करते समय --experimental- कार्यकर्ता का उपयोग करके इसे सक्षम करने की आवश्यकता होती है।
यहाँ एक उदाहरण है ES6 और कार्यकर्ता_थ्रेड्स सक्षम, संस्करण 12.3.1 पर परीक्षण किया गया
//package.json
"scripts": {
"start": "node --experimental-modules --experimental- worker index.mjs"
},
अब, आपको वर्कर से आयात करने की आवश्यकता है वर्कर_थ्रेड्स । नोट: आपको ES6 समर्थन के लिए '.mjs' एक्सटेंशन के साथ js फाइलें घोषित करने की आवश्यकता है ।
//index.mjs
import { Worker } from 'worker_threads';
const spawnWorker = workerData => {
return new Promise((resolve, reject) => {
const worker = new Worker('./workerService.mjs', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', code => code !== 0 && reject(new Error(`Worker stopped with
exit code ${code}`)));
})
}
const spawnWorkers = () => {
for (let t = 1; t <= 5; t++)
spawnWorker('Hello').then(data => console.log(data));
}
spawnWorkers();
अंत में, हम एक कार्यकर्तासेवा तैयार करते हैं
//workerService.mjs
import { workerData, parentPort, threadId } from 'worker_threads';
// You can do any cpu intensive tasks here, in a synchronous way
// without blocking the "main thread"
parentPort.postMessage(`${workerData} from worker ${threadId}`);
आउटपुट:
npm रन प्रारंभ
Hello from worker 4
Hello from worker 3
Hello from worker 1
Hello from worker 2
Hello from worker 5
अब https://github.com/xk/node-threads-a-gogo भी है , हालांकि मुझे प्रोजेक्ट की स्थिति के बारे में निश्चित नहीं है।
NodeJS में अब थ्रेड्स शामिल हैं (उत्तर देने के समय प्रायोगिक विशेषता के रूप में)।
आप Promise.race
(देशी I / O रेसिंग समाधान, धागे नहीं) की तलाश कर सकते हैं
आपको मानते हुए (या इस सवाल को खोजने वाले अन्य) असफलता से बचने और आई / ओ संचालन की लागत से बचने के लिए थ्रेड्स दौड़ना चाहते हैं, यह इसे पूरा करने का एक सरल और देशी तरीका है (जो थ्रेड का उपयोग नहीं करता है)। नोड को सिंगल थ्रेडेड किया गया है (इवेंट लूप देखें), इसलिए यदि संभव हो तो थ्रेड्स का उपयोग करने से बचें। अगर मेरे धारणा सही है, तो मैं आप का उपयोग की सलाह देते हैं Promise.race
साथ setTimeout
(लिंक में उदाहरण)। इस रणनीति के साथ, आप उन वादों की एक सूची तैयार करेंगे, जिनमें से प्रत्येक में कुछ I / O ऑपरेशन की कोशिश की जाएगी और यदि कोई त्रुटि है (तो समय समाप्त), वादे को अस्वीकार कर देंगे। Promise.race
बयान पहले संकल्प / अस्वीकृति, जो तुम क्या चाहते हो रहा है के बाद भी जारी है। आशा है कि यह किसी की मदद करता है!
Node.js थ्रेडिंग का उपयोग नहीं करता है। इसके आविष्कारक के अनुसार यह एक प्रमुख विशेषता है। इसके आविष्कार के समय, धागे धीमे, समस्याग्रस्त और कठिन थे। Node.js को एक कुशल सिंगल-कोर विकल्प में जांच के परिणामस्वरूप बनाया गया था। अधिकांश Node.js उत्साही अभी भी तु पुराने तर्क का हवाला देते हैं जैसे कि पिछले 50 वर्षों में धागे में सुधार नहीं हुआ है।
जैसा कि आप जानते हैं, Node.js का उपयोग जावास्क्रिप्ट को चलाने के लिए किया जाता है। पिछले कुछ वर्षों में जावास्क्रिप्ट भाषा भी विकसित हुई है। अब इसमें कई कोर का उपयोग करने के तरीके हैं - यानी थ्रेड्स क्या करते हैं। तो, जावास्क्रिप्ट में प्रगति के माध्यम से, आप अपने अनुप्रयोगों में कुछ मल्टी-कोर मल्टी-टास्किंग कर सकते हैं। user158 बताते हैं कि Node.js इसके साथ थोड़ा खेल रहा है। मैं उस बारे में कुछ नहीं जानता। लेकिन जावास्क्रिप्ट प्रस्ताव देने के लिए Node.js का इंतजार क्यों करें।
Node.js मल्टी-थ्रेडिंग के बजाय जावास्क्रिप्ट मल्टी-थ्रेडिंग के लिए Google। आपको वेब वर्कर्स, प्रॉमिस और अन्य चीजों के बारे में पता चलेगा।