একসাথে একাধিক পদ্ধতি চালানোর জন্য থ্রেড তৈরি করার কোনও উপায় আছে কি?
এইভাবে, অন্য কোনও থ্রেডের মধ্যে কোনও পদ্ধতি ব্যর্থ হলে হত্যা করা উচিত be
একসাথে একাধিক পদ্ধতি চালানোর জন্য থ্রেড তৈরি করার কোনও উপায় আছে কি?
এইভাবে, অন্য কোনও থ্রেডের মধ্যে কোনও পদ্ধতি ব্যর্থ হলে হত্যা করা উচিত be
উত্তর:
প্রতিটি নোড.জেএস প্রক্রিয়া ডিজাইন দ্বারা একক থ্রেডযুক্ত। একাধিক থ্রেড পেতে, আপনার একাধিক প্রক্রিয়া থাকতে হবে (অন্য কিছু পোস্টার উল্লেখ করেছেন যে, এমন কোনও গ্রন্থাগার রয়েছে যা আপনি লিঙ্ক করতে পারেন যা আপনাকে নোডে থ্রেডগুলির সাথে কাজ করার সক্ষমতা প্রদান করবে, তবে সেই লাইব্রেরি ছাড়া এমন কোনও ক্ষমতা বিদ্যমান নেই) শান ভিনসেন্টের উত্তর দেখুন https://github.com/audreyt/node-webworker-threads )
নোড.জেএস ডকুমেন্টেশনে এখানে যেমন দেখানো হয়েছে আপনি শিশু প্রক্রিয়াগুলি শুরু করতে পারেন: http://nodejs.org/api/child_process.html । উদাহরণগুলি এই পৃষ্ঠায় বেশ ভাল এবং সরাসরি সোজা এগিয়ে।
আপনার মূল প্রক্রিয়া তারপরে শুরু হওয়া যে কোনও প্রক্রিয়াতে ঘনিষ্ঠ ইভেন্টের জন্য নজর রাখতে পারে এবং তারপরে আপনি যে প্রকারের কথা বলছেন সে সমস্ত স্টপ স্ট্র্যাটেজে ব্যর্থতার প্রকারটি অর্জন করতে আপনি যে প্রক্রিয়া শুরু করেছিলেন তা বন্ধ করতে বাধ্য করতে পারে।
আরও দেখুন: মাল্টি-কোর মেশিনে নোড.জেএস
নোড.জেএস এর মধ্যে নেটিভ থ্রেডিংয়ের জন্য কমপক্ষে একটি লাইব্রেরি রয়েছে: নোড-ওয়েবকর্ম-থ্রেড
https://github.com/audreyt/node-webworker- থ্রেডস
এটি মূলত node.js. এর জন্য ওয়েব কর্মী ব্রাউজার এপিআই প্রয়োগ করে ।
নোড 10.5 থেকে এখন মাল্টি থ্রেডিং সমর্থন রয়েছে তবে এটি পরীক্ষামূলক । আশা করি শিগগিরই এটি স্থিতিশীল হয়ে উঠবে।
নিম্নলিখিত সংস্থানসমূহ চেকআউট:
আপডেট :
নোড v11.7.0 থেকে, আপনাকে --experimental-worker
পতাকা ব্যবহার করতে হবে না ।
প্রকাশের দ্রষ্টব্য: https://nodejs.org/en/blog/release/v11.7.0/
আপনি Napa.js ব্যবহার করে মাল্টি-থ্রেডিং পেতে পারেন
https://github.com/Mic Microsoft/napajs
"নাপা.জেএসএস ভি 8 এর উপর নির্মিত একটি মাল্টি-থ্রেডেড জাভাস্ক্রিপ্ট রানটাইম, যা মূলত বিং-এ আপোস-আপোমড পারফরম্যান্স সহ উচ্চ পুনরাবৃত্তামূলক পরিষেবাগুলি বিকাশের জন্য ডিজাইন করা হয়েছিল As এটি বিকশিত হওয়ার সাথে সাথে আমরা সিপিইউ-বাউন্ড কার্যগুলিতে নোড.জেগুলি পরিপূরক হিসাবে দরকারী বলে মনে করি useful , একাধিক ভি 8 আইসোলেটে জাভাস্ক্রিপ্ট চালানো এবং তাদের মধ্যে যোগাযোগের ক্ষমতা সহ। নাপা.জেএস একটি নোড.জেএস মডিউল হিসাবে উদ্ভাসিত হয়েছে, অন্যদিকে এটি নোড.জেএস নির্ভরতা ছাড়াই একটি হোস্ট প্রক্রিয়াতে এম্বেড করা যেতে পারে। "
আপনি যদি আরএক্স ব্যবহার করে থাকেন তবে rxjs-cluster এ প্লাগইন করা সমান্তরাল সম্পাদনায় বিভক্ত হয়ে কাজ করা সহজ। (অস্বীকৃতি: আমি লেখক)
আমার নোড.জেজে সত্যিকারের মাল্টিথ্রেডিং দরকার ছিল এবং আমার জন্য থ্রেড প্যাকেজটি কী কাজ করেছিল । এটি নিজস্ব নোড.জেএস এর বার্তা লুপ থাকার অন্য প্রক্রিয়া তৈরি করে, যাতে তারা একে অপরকে অবরুদ্ধ করে না। সেটআপটি সহজ এবং ডকুমেন্টেশনগুলি আপনাকে দ্রুত চালিয়ে চলেছে। আপনার মূল প্রোগ্রাম এবং কর্মীরা উভয় উপায়ে যোগাযোগ করতে পারে এবং প্রয়োজনে শ্রমিক "থ্রেড" হত্যা করতে পারে।
যেহেতু মাল্টিথ্রেডিং এবং নোড.জেএস একটি জটিল এবং বহুল আলোচিত বিষয় তাই আমার নির্দিষ্ট প্রয়োজনের জন্য কাজ করে এমন একটি প্যাকেজ খুঁজে পাওয়া বেশ কঠিন ছিল । রেকর্ডের জন্য এগুলি আমার পক্ষে কার্যকর হয়নি :
require
আমার প্রয়োজনীয় কর্মীদের মধ্যে মডিউলগুলিকে অনুমতি দেয় নিএবং তাদের জিজ্ঞাসা করার জন্য কেন আমার আসল মাল্টি-থ্রেডিং প্রয়োজন: রাস্পবেরি পাই এবং বাধা যুক্ত একটি অ্যাপ্লিকেশনের জন্য। একটি থ্রেড সেই বিঘ্নগুলি পরিচালনা করছে এবং অন্যটি ডেটা (এবং আরও) সঞ্চয় করার যত্ন নেয় care
নোডেজ 10.5.0 রিলিজ নোড.জেজে মাল্টিথ্রেডিংয়ের ঘোষণা করেছে । বৈশিষ্ট্যটি এখনও পরীক্ষামূলক। এখন একটি নতুন কর্মী_প্রেম মডিউল উপলব্ধ।
আপনি যদি নোড.জেএস ভি 10.5.0 বা উচ্চতর চালনা করেন তবে আপনি শ্রমিক থ্রেডগুলি ব্যবহার শুরু করতে পারেন তবে এটি একটি পরীক্ষামূলক এপিআই । এটি ডিফল্টরূপে উপলভ্য নয়: নোড.জেএস-কে অনুরোধ করার সময় আপনাকে এক্সপেরিমেন্টাল-কর্মী ব্যবহার করে এটি সক্ষম করতে হবে ।
ES6 এবং কর্মী_থ্রেডগুলি সক্ষম, উদাহরণ 12.3.1 এ পরীক্ষা করা হয়েছে with
//package.json
"scripts": {
"start": "node --experimental-modules --experimental- worker index.mjs"
},
এখন, আপনাকে কর্মী_প্রেমগুলি থেকে কর্মী আমদানি করতে হবে । টীকা: আপনি আপনার কি ডিক্লেয়ার করার প্রয়োজন JS ফাইল '.mjs' এক্সটেনশন ES6 সমর্থনের জন্য।
//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}`);
আউটপুট:
এনপিএম রান শুরু
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 রয়েছে , যদিও আমি প্রকল্পের স্থিতি সম্পর্কে নিশ্চিত নই।
আপনি সন্ধান করছেন Promise.race
(দেশীয় আই / ও রেসিং সলিউশন, থ্রেড নয়)
ধরে নিই যে আপনি (বা অন্যরা এই প্রশ্নটি সন্ধান করছেন) ব্যর্থতা এড়াতে এবং I / O ক্রিয়াকলাপের ব্যয় এড়াতে থ্রেডগুলিতে রেস করতে চান, এটি সম্পন্ন করার জন্য এটি একটি সহজ এবং দেশীয় উপায় (যা থ্রেড ব্যবহার করে না)। নোডটি একক থ্রেডযুক্ত হওয়ার জন্য ডিজাইন করা হয়েছে (ইভেন্টের লুপটি সন্ধান করুন), সুতরাং সম্ভব হলে থ্রেডগুলি ব্যবহার করা এড়ানো। যদি আমার অনুমানটি সঠিক হয় তবে আমি আপনাকে (লিঙ্কে উদাহরণ হিসাবে) ব্যবহার Promise.race
করার পরামর্শ দিচ্ছি setTimeout
। এই কৌশলটি সহ, আপনি প্রতিশ্রুতিগুলির একটি তালিকা চালিয়ে যাবেন যা প্রত্যেকে কয়েকটি I / O অপারেশন চেষ্টা করে এবং যদি কোনও ত্রুটি (অন্যথায় সময়সীমা) থাকে তবে প্রতিশ্রুতি প্রত্যাখ্যান করে। Promise.race
বিবৃতি প্রথম রেজল্যুশন / প্রত্যাখ্যান, যা আপনি যা চান তা হবে বলে মনে হয় পরে চলতে থাকে। আশা করি এটি কাউকে সাহায্য করবে!
নোড.জেএস থ্রেডিং ব্যবহার করে না। এর উদ্ভাবক অনুসারে এটি একটি মূল বৈশিষ্ট্য। এর আবিষ্কারের সময় থ্রেডগুলি ধীর, সমস্যাযুক্ত এবং কঠিন ছিল। নোড.জেএস একটি দক্ষ একক-কোর বিকল্পের তদন্তের ফলাফল হিসাবে তৈরি করা হয়েছিল। বেশিরভাগ নোড.জেস উত্সাহীরা এখনও আপনার পুরানো যুক্তিটি উদ্ধৃত করেছেন যেন গত ৫০ বছরে থ্রেডগুলি উন্নত হয়নি।
আপনি কি জানেন যে নোড.জেএস জাভাস্ক্রিপ্ট চালাতে ব্যবহৃত হয়। জাভাস্ক্রিপ্ট ভাষা বছরের পর বছর ধরে বিকাশ হয়েছে। এটিতে এখন একাধিক কোর ব্যবহারের উপায় রয়েছে - যেমন থ্রেডগুলি কী করে। সুতরাং, জাভাস্ক্রিপ্টের অগ্রগতির মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনগুলিতে কিছু মাল্টি-কোর মাল্টি-টাস্কিং করতে পারেন। ব্যবহারকারী 158 উল্লেখ করে যে নোড.জেএস এটির সাথে কিছুটা খেলছে। আমি সে সম্পর্কে কিছুই জানি না। তবে জাভাস্ক্রিপ্ট কী অফার করবে তা অনুমোদনের জন্য নোড.জেসের জন্য কেন অপেক্ষা করুন।
নোড.জেএস মাল্টি থ্রেডিংয়ের পরিবর্তে জাভাস্ক্রিপ্ট মাল্টি থ্রেডিংয়ের জন্য গুগল। ওয়েব ওয়ার্কার্স, প্রতিশ্রুতি এবং অন্যান্য জিনিসগুলি সম্পর্কে আপনি খুঁজে পাবেন।