নোট জেএসকে মাল্টিথ্রেডিংয়ের বিকল্পটি উপলব্ধি করা


142

যদি আমি সঠিকভাবে বুঝতে পারি নোড জেএস হ'ল ব্লক করা ... সুতরাং কোনও ডাটাবেস বা অন্য প্রক্রিয়া থেকে প্রতিক্রিয়া অপেক্ষা না করে এটি অন্য কোনও কিছুতে স্থানান্তরিত হয়েছিল এবং পরে তা আবার পরীক্ষা করে।

এছাড়াও এটি একক থ্রেডযুক্ত।

সুতরাং এর অর্থ কি এই যে কোনও প্রদত্ত নোড জেএস প্রক্রিয়া সম্পূর্ণ সিদ্ধি এবং দক্ষতার সাথে একটি সিপিইউ কোর ব্যবহার করতে পারে তবে এটি মেশিনে অন্য কোনও কোর ব্যবহার করবে না, যেমন এটি একবারে একের বেশি ব্যবহার করবে না।

অবশ্যই এটির অর্থ হ'ল এসপিএল ডাটাবেস বা অন্য ইচ্ছাকৃতভাবে পৃথক করা সিপিইউ ভারী সাবরুটিনগুলি যেমন আলাদা প্রক্রিয়া হয় ততক্ষণ অন্য সিপিইউগুলি অন্যান্য প্রক্রিয়াগুলি দ্বারা ব্যবহার করা যেতে পারে।

নোড জেএস প্রক্রিয়াটির একটি অন্তহীন লুপ বা দীর্ঘ চলমান ফাংশন রয়েছে সে ক্ষেত্রেও অন্তহীন লুপ বা দীর্ঘ চলমান ক্রিয়াকলাপ বন্ধ না হওয়া পর্যন্ত (বা পুরো প্রক্রিয়াটি মারা যায়) যতক্ষণ না প্রক্রিয়াটি কোনওভাবেই কার্যকর হয় না।

সব ঠিক আছে? আমি কি আমার বোঝার মধ্যে সঠিক?


2
"নোড" হয় না একক থ্রেডেড। কেবল জেএস / ভি 8 ইঞ্জিন একক থ্রেডে চলবে। নোডজেএসের লিবুভ অংশটি বহু-থ্রেডযুক্ত। দেখুন নোডজেএস কি সত্যই একক থ্রেডেড?
রায়েলবি

উত্তর:


87

বেশ অনেকটা সঠিক, হ্যাঁ। নোড.জেএস সার্ভারের একটি অভ্যন্তরীণ থ্রেড পুল রয়েছে যাতে এটি ব্লকিং ক্রিয়াকলাপ সম্পাদন করতে পারে এবং জিনিসগুলি সম্পূর্ণ হয়ে গেলে মূল থ্রেডকে কলব্যাক বা ইভেন্টের সাথে জানাতে পারে।

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

তবে নোড.জেএস দৃষ্টিকোণ থেকে এটি সম্পূর্ণ একক থ্রেডেড এবং সরাসরি একাধিক কোর ব্যবহার করবে না।


2
আমি এখনও নোড.জেজে নতুন এবং আলোচনাটি এখানে প্রশংসা করি। আমি কেবল এটিই উল্লেখ করতে চেয়েছিলাম যে নন-ব্লকিং কলগুলি থ্রেডড ব্লকিং কলগুলির দ্বারা ব্যাক করা হয়েছে এমন অনুমান করা সম্ভবত বুদ্ধিমানের কাজ নয় (এটি নয় যে @ জে কোডার এই অনুমানগুলির চারপাশে আর্কিটেক্ট কোডের পরামর্শ দিয়েছিল)। এই ক্ষেত্রে, আইওও যদি একটি ব্লকিং কল সহ একটি পৃথক থ্রেডে পরিচালনা করা হয়, তবে এই থ্রেডটি মূলত আইও-তে যাইহোক অপেক্ষা করবে, সুতরাং এটি অন্যান্য কোর / সিপিইউ ব্যবহার করবে না। আপনি যে সরঞ্জামগুলি ব্যবহার করছেন তার শক্তির কোড দিন এবং নিম্ন স্তরের বিশদ সম্পর্কে খুব বেশি চিন্তা করবেন না (যতক্ষণ না তারা সমস্যা হয়ে যায়)।
wbyoung

সুতরাং আমরা সামনের জাভাস্ক্রিপ্ট কোডের মতো কলব্যাক ব্যবহার করে অন্যান্য প্রসেস করতে পারি
ইউসান

37

হ্যাঁ, আমি বলব যে আপনার বোঝাপড়া সম্পূর্ণ সঠিক। এই নিবন্ধটি ( সংরক্ষণাগারভুক্ত ) এই নকশার পিছনে যুক্তিটি বেশ ভালভাবে ব্যাখ্যা করেছে। এটি সম্ভবত সবচেয়ে গুরুত্বপূর্ণ অনুচ্ছেদ:

অ্যাপাচি মাল্টিথ্রেডযুক্ত: এটি অনুরোধ অনুযায়ী একটি থ্রেড তৈরি করে (বা প্রক্রিয়া, এটি কনফের উপর নির্ভর করে)। একযোগে সংযোগের সংখ্যা বৃদ্ধি পেতে এবং একাধিক সিমুলেটেনিয়াস ক্লায়েন্ট পরিবেশন করার জন্য আরও থ্রেডের প্রয়োজন হওয়ায় আপনি দেখতে পাচ্ছেন যে ওভারহেড কীভাবে মেমরি খায়। Nginx এবং Node.js মাল্টিথ্রেড হয় না, কারণ থ্রেড এবং প্রক্রিয়াগুলি একটি ভারী মেমরির ব্যয় করে। এগুলি একক থ্রেডযুক্ত তবে ইভেন্ট ভিত্তিক। এটি একক থ্রেডে বহু সংযোগ পরিচালনা করে হাজার হাজার থ্রেড / প্রক্রিয়া দ্বারা নির্মিত ওভারহেডকে সরিয়ে দেয়।


নিবন্ধটি মিথ্যা। যদিও একটি মাল্টিথ্রেডেড অ্যাপাচি এমপিএম বিদ্যমান, এটি ব্যবহারিকভাবে ব্যবহৃত সমস্ত ব্যবহৃত কনফিগারেশনের সাথে বেমানান। অ্যাপাচি মাল্টিপ্রসেস এবং এখন অবধি মাল্টিথ্রেড নয় এবং সম্ভবত চিরকালই থাকবে। আমি এটি বিপর্যয়কর বলে মনে করি, পরিভাষাটির যথাযথ অর্থগুলি হস্তক্ষেপ করা সমস্যাটিকে আড়াল করার পরিবর্তে কেবল এটি চেষ্টা করার চেষ্টা করুন।
পিটারঃ

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

@ মিশেলবার্গওয়ার্ট হ্যাঁ, অ্যাপাচি মাল্টিথ্রেড এবং মাল্টিপ্রসেসও হতে পারে, আমি এটি অস্বীকার করি নি। তবে পিএইচপি মাল্টিপ্রসেস কনফিগারেশনের সাথে বেমানান এবং আপনি যদি অ্যাপাচি বিশেষজ্ঞ হন তবে অবশ্যই আপনি এটি জানতে পারবেন। খুব ব্যবহৃত পিএইচপি মডিউলটি মাল্টিথ্রেড হয় না। আপনার তথ্য মিথ্যা। আমি একটি পরীক্ষার কনফিগারেশন চেষ্টা করার পরামর্শ দিই এবং আপনি দেখতে পাবেন। এটি একটি তাত্পর্যপূর্ণ বিষয়, বিতর্কের বিষয় নয়, এটি চেষ্টা করে দেখুন এবং আপনি দেখতে পাবেন।
পিটারহ - মনিকা

27

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

সাধারণ উদাহরণ:

var method = function () {
    console.log("this is message from thread no", process.threadId);
};

jxcore.tasks.runOnThread(0, method);
jxcore.tasks.runOnThread(1, method);

// this is message from thread no 1
// this is message from thread no 0

ডিফল্টভাবে দুটি থ্রেড থাকে (আপনি এটি দিয়ে এটি পরিবর্তন করতে পারেন jxcore.tasks.setThreadCount())

অবশ্যই আপনি কাজগুলি করতে পারেন আরও অনেক কিছু আছে। দস্তাবেজগুলি এখানে

এই বিষয়ে কয়েকটি নিবন্ধ:


13

যেহেতু এই প্রশ্নটি প্রায় 2 বছর আগে জিজ্ঞাসা করা হয়েছিল। জিনিসগুলি পৃথক হয়ে উঠছে বা নোড.জেএস-এ মাল্টিথ্রেডিং সমস্যার বিকল্প বিকল্প রয়েছে

নীচের ব্লগ পোস্ট অনুসারে, আগত 'টাস্ক' এক্সটেনশনটি ব্যবহার করে কেউ কেউ সরাসরি অন্যান্য উপলব্ধ কোর থেকে উপকৃত হতে পারে।

http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html


1

নোড.জেএস একটি একক থ্রেডযুক্ত অ্যাপ্লিকেশন, তবে এটি ইভেন্ট এবং কলব্যাক্সের ধারণার মাধ্যমে সম্মতিতে সমর্থন করতে পারে। এখানে ফিলিপ রবার্টসের ভিডিও রয়েছে যা জাভাস্ক্রিপ্টে ইভেন্ট-লুপগুলি কীভাবে কাজ করে তা ব্যাখ্যা করে।

ভিডিও দেখতে এখানে ক্লিক করুন

(ওয়েবএপিআইয়ের পরিবর্তে নোড.জেজে সি ++ এপিআই রয়েছে)


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