নোডজেএস কীভাবে "অবরুদ্ধ" হতে পারে?


14

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

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

http.createServer(function (req, res) {
  database.getInformation(function (data) {
      res.writeHead(200);
      res.end(data);
  });
});

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

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

উত্তর:


17

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

ডাটাবেসগুলির জন্য, এটি গ্রন্থাগারটি কীভাবে রচিত হয় তার উপর নির্ভর করে। যদি এটি যোগাযোগ করার জন্য এইচটিটিপি ব্যবহার করে (কিছু নোএসকিউএল ডাটাবেস যেমন করে) তবে এটি স্ট্যান্ডার্ড নোড httpলাইব্রেরি ব্যবহার করে খাঁটি জাভাস্ক্রিপ্টে সহজেই লেখা যেতে পারে । এটি যদি এটি অন্যভাবে করে তবে ভাল, এটি লাইব্রেরি পর্যন্ত। এটি সি / সি ++ এ লিখিত হতে পারে এবং পটভূমি থ্রেডগুলি ব্যবহার করা যেতে পারে যতক্ষণ না জাভাস্ক্রিপ্টের বিমূর্ততা কখনই উন্মুক্ত হয় না।

আপনার ডেটাবেস অনুরোধটি "প্রক্রিয়াজাতকরণ" কী তা সম্পর্কে প্রশ্ন হিসাবে, আদর্শভাবে যা করা উচিত তা হ'ল একটি লাইব্রেরিতে একটি সাধারণ বার্তা পাঠানো (যেমন একটি এসকিউএল বিবৃতি বা কোনও অন্য কোয়েরি বা সংযোগের জন্য একটি অনুরোধ), এবং সেই সময়ে আপনার জাভাস্ক্রিপ্ট chugging উপর রাখে। লাইব্রেরিটি যখন কোনও বার্তা প্রেরণের জন্য প্রস্তুত হয়, তখন এটি নোডের ইভেন্ট সারিতে একটি বার্তা প্রেরণ করে যা কলব্যাকটি চালায়, কোডটির স্নিপেটটি চালানোর অনুমতি দেয়।


নেই netপ্যাকেজ যখন HTTP পাওয়া যায় না।
ফ্লোরিয়ান মার্জাইন

বিস্তারিত যে সাহায্য করতে পারে। নোড ভি 8 জেএস ইঞ্জিনটি ব্যবহার করে। ভি 8 এর সেরা বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল জেএস কলগুলিতে সি / সি ++ প্রসেস বন্ডিং করা সহজ। জাভাস্ক্রিপ্ট ফাংশনগুলি ব্লক করা হচ্ছে তবে সমস্ত ফাংশন হুডের নীচে এমন কিছু কল করে যা অবরুদ্ধ হয় না। তারপরে আর একটি জেএস ফাংশন সাড়া দেয় যখন সেই প্রক্রিয়াটি সম্পন্ন হয়। জেএস ফাংশনগুলি একে অপরকে অবরুদ্ধ করে রাখছে এর অর্থ আপনার কাছে কখনও একই জিনিস একই সময়ে একই ফাইল লোকেশনতে লেখার সময়সূচী করার চেষ্টা করার মতো দুটি জিনিস থাকবে না যেখানে আমি মনে করি যে মাল্টি-থ্রেড পরিচালনা করা দরকার। জিনিসগুলি সারিবদ্ধ করার উদ্দেশ্যে প্রথমে কোন অনুরোধটি এসেছে তা সর্বদা পরিষ্কার।
এরিক রেপেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.