নোডেজগুলিতে কীভাবে থ্রেড তৈরি করা যায়


91

একসাথে একাধিক পদ্ধতি চালানোর জন্য থ্রেড তৈরি করার কোনও উপায় আছে কি?

এইভাবে, অন্য কোনও থ্রেডের মধ্যে কোনও পদ্ধতি ব্যর্থ হলে হত্যা করা উচিত be

উত্তর:


94

প্রতিটি নোড.জেএস প্রক্রিয়া ডিজাইন দ্বারা একক থ্রেডযুক্ত। একাধিক থ্রেড পেতে, আপনার একাধিক প্রক্রিয়া থাকতে হবে (অন্য কিছু পোস্টার উল্লেখ করেছেন যে, এমন কোনও গ্রন্থাগার রয়েছে যা আপনি লিঙ্ক করতে পারেন যা আপনাকে নোডে থ্রেডগুলির সাথে কাজ করার সক্ষমতা প্রদান করবে, তবে সেই লাইব্রেরি ছাড়া এমন কোনও ক্ষমতা বিদ্যমান নেই) শান ভিনসেন্টের উত্তর দেখুন https://github.com/audreyt/node-webworker-threads )

নোড.জেএস ডকুমেন্টেশনে এখানে যেমন দেখানো হয়েছে আপনি শিশু প্রক্রিয়াগুলি শুরু করতে পারেন: http://nodejs.org/api/child_process.html । উদাহরণগুলি এই পৃষ্ঠায় বেশ ভাল এবং সরাসরি সোজা এগিয়ে।

আপনার মূল প্রক্রিয়া তারপরে শুরু হওয়া যে কোনও প্রক্রিয়াতে ঘনিষ্ঠ ইভেন্টের জন্য নজর রাখতে পারে এবং তারপরে আপনি যে প্রকারের কথা বলছেন সে সমস্ত স্টপ স্ট্র্যাটেজে ব্যর্থতার প্রকারটি অর্জন করতে আপনি যে প্রক্রিয়া শুরু করেছিলেন তা বন্ধ করতে বাধ্য করতে পারে।

আরও দেখুন: মাল্টি-কোর মেশিনে নোড.জেএস


প্রক্রিয়াগুলি কি একই সময়ে সমান্তরাল এবং অনুক্রমিক চলতে পারে?
ব্যবহারকারী 87267867

4
সন্তানের প্রক্রিয়াগুলি পিতামাতার প্রক্রিয়া থেকে স্বতন্ত্র। তাদের নিজস্ব মেমরি স্পেস, পিআইডি এবং কার্যকর করার সময় রয়েছে। ক্রম অনুসারে আপনি কী বোঝেন তা নিশ্চিত নন তবে হ্যাঁ, এগুলি সমান্তরালভাবে চলবে এবং কার্যকর করার জন্য ওএস দ্বারা পৃথকভাবে নির্ধারিত হবে।
ব্রায়ান

কিভাবে শিশু প্রক্রিয়া হিসাবে ব্যবহারকারী সংজ্ঞায়িত ফাংশন কল?
ব্যবহারকারী 87267867

আমি কীভাবে কোনও শিশু প্রক্রিয়াটিকে ফাংশন abc () {}
ইউজার 87267867

4
হু, সেই লাইব্রেরি সম্পর্কে অবহিত ছিল না তবে এটি অ্যালেক্স মিলের মতামতের মতো দেখা যাচ্ছে আপনি নোডে কিছু থ্রেডিংয়ের কাজ করতে পারেন। যা বলা হচ্ছে, পরবর্তী প্রশ্নটি আপনার উচিত। । । নোডটি গ্রাউন্ড অব ফ্রি প্রোগ্রামারগুলি জটিলতা থেকে মুক্ত করে থ্রেড নিয়ে আসে তবে আই / ও ব্লক করার জন্য অনুরূপ ধরণের পারফরম্যান্স দেয় yield রেফারেন্সড লাইব্রেরিটি ব্যবহার করে এটি সম্ভব যে সত্যের জন্য আমি অ্যাকাউন্টে আমার উত্তর সম্পাদনা করব।
ব্রায়ান

34

নোড.জেএস এর মধ্যে নেটিভ থ্রেডিংয়ের জন্য কমপক্ষে একটি লাইব্রেরি রয়েছে: নোড-ওয়েবকর্ম-থ্রেড

https://github.com/audreyt/node-webworker- থ্রেডস

এটি মূলত node.js. এর জন্য ওয়েব কর্মী ব্রাউজার এপিআই প্রয়োগ করে ।


4
এটি সঠিক হওয়া উচিত। উত্তরটি বোঝায় যে নোড কেবল প্রক্রিয়াগুলি পোড়াতে পারে তবে থ্রেড নয়, ভুল।
আলেকজান্ডার মিলস

20

নোড 10.5 থেকে এখন মাল্টি থ্রেডিং সমর্থন রয়েছে তবে এটি পরীক্ষামূলক । আশা করি শিগগিরই এটি স্থিতিশীল হয়ে উঠবে।

নিম্নলিখিত সংস্থানসমূহ চেকআউট:


আপডেট :

নোড v11.7.0 থেকে, আপনাকে --experimental-workerপতাকা ব্যবহার করতে হবে না ।

প্রকাশের দ্রষ্টব্য: https://nodejs.org/en/blog/release/v11.7.0/


9

আপনি Napa.js ব্যবহার করে মাল্টি-থ্রেডিং পেতে পারেন

https://github.com/Mic Microsoft/napajs

"নাপা.জেএসএস ভি 8 এর উপর নির্মিত একটি মাল্টি-থ্রেডেড জাভাস্ক্রিপ্ট রানটাইম, যা মূলত বিং-এ আপোস-আপোমড পারফরম্যান্স সহ উচ্চ পুনরাবৃত্তামূলক পরিষেবাগুলি বিকাশের জন্য ডিজাইন করা হয়েছিল As এটি বিকশিত হওয়ার সাথে সাথে আমরা সিপিইউ-বাউন্ড কার্যগুলিতে নোড.জেগুলি পরিপূরক হিসাবে দরকারী বলে মনে করি useful , একাধিক ভি 8 আইসোলেটে জাভাস্ক্রিপ্ট চালানো এবং তাদের মধ্যে যোগাযোগের ক্ষমতা সহ। নাপা.জেএস একটি নোড.জেএস মডিউল হিসাবে উদ্ভাসিত হয়েছে, অন্যদিকে এটি নোড.জেএস নির্ভরতা ছাড়াই একটি হোস্ট প্রক্রিয়াতে এম্বেড করা যেতে পারে। "



3

আমার নোড.জেজে সত্যিকারের মাল্টিথ্রেডিং দরকার ছিল এবং আমার জন্য থ্রেড প্যাকেজটি কী কাজ করেছিল । এটি নিজস্ব নোড.জেএস এর বার্তা লুপ থাকার অন্য প্রক্রিয়া তৈরি করে, যাতে তারা একে অপরকে অবরুদ্ধ করে না। সেটআপটি সহজ এবং ডকুমেন্টেশনগুলি আপনাকে দ্রুত চালিয়ে চলেছে। আপনার মূল প্রোগ্রাম এবং কর্মীরা উভয় উপায়ে যোগাযোগ করতে পারে এবং প্রয়োজনে শ্রমিক "থ্রেড" হত্যা করতে পারে।

যেহেতু মাল্টিথ্রেডিং এবং নোড.জেএস একটি জটিল এবং বহুল আলোচিত বিষয় তাই আমার নির্দিষ্ট প্রয়োজনের জন্য কাজ করে এমন একটি প্যাকেজ খুঁজে পাওয়া বেশ কঠিন ছিল । রেকর্ডের জন্য এগুলি আমার পক্ষে কার্যকর হয়নি :

  • ক্ষুদ্র-শ্রমিক শ্রমজীবীদের মঞ্জুরি দেয়, তবে তারা একই বার্তা লুপটি ভাগ করে নেবে বলে মনে হয় (তবে এটি হতে পারে আমি কোনও ভুল করেছিলাম - থ্রেডগুলিতে আমার আরও আত্মবিশ্বাস প্রদানের জন্য আরও নথিপত্র রয়েছে যা এটি সত্যিই একাধিক প্রক্রিয়া ব্যবহার করেছিল, সুতরাং আমি এটি চালিয়ে যাওয়া অবধি চলতে থাকি)
  • ওয়েবকর্ম-থ্রেডগুলিrequire আমার প্রয়োজনীয় কর্মীদের মধ্যে মডিউলগুলিকে অনুমতি দেয় নি

এবং তাদের জিজ্ঞাসা করার জন্য কেন আমার আসল মাল্টি-থ্রেডিং প্রয়োজন: রাস্পবেরি পাই এবং বাধা যুক্ত একটি অ্যাপ্লিকেশনের জন্য। একটি থ্রেড সেই বিঘ্নগুলি পরিচালনা করছে এবং অন্যটি ডেটা (এবং আরও) সঞ্চয় করার যত্ন নেয় care


4
আমি এই উত্তরে রাখা মহান চিন্তা প্রশংসা করি!
এমলিসেটেরাস

3

নোডেজ 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

4
এটি কি আপনার নিবন্ধ: blog.logrket.com/… ?
সার্ভ-ইনস

না..এটি নয় ... যদিও আমি সময়মতো এটি আবার উল্লেখ করেছি।
prieshdkr



0

আপনি সন্ধান করছেন Promise.race(দেশীয় আই / ও রেসিং সলিউশন, থ্রেড নয়)

ধরে নিই যে আপনি (বা অন্যরা এই প্রশ্নটি সন্ধান করছেন) ব্যর্থতা এড়াতে এবং I / O ক্রিয়াকলাপের ব্যয় এড়াতে থ্রেডগুলিতে রেস করতে চান, এটি সম্পন্ন করার জন্য এটি একটি সহজ এবং দেশীয় উপায় (যা থ্রেড ব্যবহার করে না)। নোডটি একক থ্রেডযুক্ত হওয়ার জন্য ডিজাইন করা হয়েছে (ইভেন্টের লুপটি সন্ধান করুন), সুতরাং সম্ভব হলে থ্রেডগুলি ব্যবহার করা এড়ানো। যদি আমার অনুমানটি সঠিক হয় তবে আমি আপনাকে (লিঙ্কে উদাহরণ হিসাবে) ব্যবহার Promise.raceকরার পরামর্শ দিচ্ছি setTimeout। এই কৌশলটি সহ, আপনি প্রতিশ্রুতিগুলির একটি তালিকা চালিয়ে যাবেন যা প্রত্যেকে কয়েকটি I / O অপারেশন চেষ্টা করে এবং যদি কোনও ত্রুটি (অন্যথায় সময়সীমা) থাকে তবে প্রতিশ্রুতি প্রত্যাখ্যান করে। Promise.raceবিবৃতি প্রথম রেজল্যুশন / প্রত্যাখ্যান, যা আপনি যা চান তা হবে বলে মনে হয় পরে চলতে থাকে। আশা করি এটি কাউকে সাহায্য করবে!


4
থ্রেডগুলির সাথে এটির কোনও সম্পর্ক নেই। তারা সবাই একই সুতায় চালায়।
ইভান ক্যারল

@ ইভানক্রোল - আমাকে সতর্ক করার জন্য আপনাকে ধন্যবাদ যে আমি যথেষ্ট পরিষ্কার ছিলাম না। কেউ কেন থ্রেড রেসিংয়ের দিকে নজর রাখতে পারে সে সম্পর্কে একটি অনুমানের সাথে আমি এর প্রস্তাব দিয়েছি এবং উল্লেখ করেছি যে এটি নোডের ইভেন্ট লুপে প্রতিশ্রুতি ব্যবহার করে। অন্য একটি ভাষা থেকে আগত, থ্রেডগুলি কী সম্পাদন করতে চান তা আপনি খুব সম্ভব কিন্তু ইভেন্ট ইভেন্ট লুপ বা প্রতিশ্রুতিগুলির সাথে এখনও পরিচিত নন। আমি লক্ষ করতে চেয়েছিলাম যে এটি সম্পাদন করার আরও সহজ উপায় আছে যদি এটি আপনার লক্ষ্য। আমি একটি বন্ধনী যুক্ত করেছি যে এটি থ্রেড ব্যবহার করে না। এটি যদি বিষয়গুলি পরিষ্কার করে দেয় তবে আমাকে জানান।
হাস্যাহাম

এটি ওপিএসের মাপদণ্ডেরও জবাব দেয় বলে মনে হয়: "অন্য কোনও থ্রেডের মধ্যে যদি কোনও পদ্ধতি ব্যর্থ হয় তবে তাকে হত্যা করা উচিত", সুতরাং আমি বুঝতে পেরেছিলাম এটি প্রাসঙ্গিক।
হাস্যাহাম

প্রতিশ্রুতি.রাস সমস্ত প্রতিশ্রুতি ধারাবাহিকভাবে সম্পাদন করে, অ্যাসিনক্রোনাস অপারেশনের ক্ষেত্রে এক থেকে অন্যটিতে স্যুইচ করে (বা অ্যাসিঙ্ক ফাংশনের ক্ষেত্রে অপেক্ষা করুন)।
নাগভূষণ বাড্ডি

0

নোড.জেএস থ্রেডিং ব্যবহার করে না। এর উদ্ভাবক অনুসারে এটি একটি মূল বৈশিষ্ট্য। এর আবিষ্কারের সময় থ্রেডগুলি ধীর, সমস্যাযুক্ত এবং কঠিন ছিল। নোড.জেএস একটি দক্ষ একক-কোর বিকল্পের তদন্তের ফলাফল হিসাবে তৈরি করা হয়েছিল। বেশিরভাগ নোড.জেস উত্সাহীরা এখনও আপনার পুরানো যুক্তিটি উদ্ধৃত করেছেন যেন গত ৫০ বছরে থ্রেডগুলি উন্নত হয়নি।

আপনি কি জানেন যে নোড.জেএস জাভাস্ক্রিপ্ট চালাতে ব্যবহৃত হয়। জাভাস্ক্রিপ্ট ভাষা বছরের পর বছর ধরে বিকাশ হয়েছে। এটিতে এখন একাধিক কোর ব্যবহারের উপায় রয়েছে - যেমন থ্রেডগুলি কী করে। সুতরাং, জাভাস্ক্রিপ্টের অগ্রগতির মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনগুলিতে কিছু মাল্টি-কোর মাল্টি-টাস্কিং করতে পারেন। ব্যবহারকারী 158 উল্লেখ করে যে নোড.জেএস এটির সাথে কিছুটা খেলছে। আমি সে সম্পর্কে কিছুই জানি না। তবে জাভাস্ক্রিপ্ট কী অফার করবে তা অনুমোদনের জন্য নোড.জেসের জন্য কেন অপেক্ষা করুন।

নোড.জেএস মাল্টি থ্রেডিংয়ের পরিবর্তে জাভাস্ক্রিপ্ট মাল্টি থ্রেডিংয়ের জন্য গুগল। ওয়েব ওয়ার্কার্স, প্রতিশ্রুতি এবং অন্যান্য জিনিসগুলি সম্পর্কে আপনি খুঁজে পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.