কোনটি নোড.জেজে সমবর্তী কাজগুলির জন্য ভাল হবে? Fibers? ওয়েব-কর্মীদের? না থ্রেডস?


111

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

হালনাগাদ:

আমি দেরি করে কোনও উপায় নিয়ে ভাবছিলাম; এটি সম্পর্কে পরামর্শ প্রয়োজন। এখন, আমি যা ভেবেছিলাম তা হ'ল আসুন কিছু থ্রেড থাকুক (থ্রেড_এ_গোগো বা সম্ভবত ওয়েবকারীরা ব্যবহার করে)। এখন, যখন আমাদের আরও প্রয়োজন হয়, আমরা আরও তৈরি করতে পারি। তবে সৃষ্টি প্রক্রিয়াটির কিছুটা সীমা থাকবে। (সিস্টেম দ্বারা জড়িত নয় তবে সম্ভবত ওভারহেডের কারণে) এখন, যখন আমরা সীমা অতিক্রম করি, আমরা একটি নতুন নোড কাঁটাচামচ করতে পারি, এবং এটির উপরে থ্রেড তৈরি করা শুরু করতে পারি। এইভাবে, আমরা কিছু সীমা পৌঁছানোর আগ পর্যন্ত এটি চলতে পারে (সর্বোপরি, প্রক্রিয়াগুলিতে খুব বেশি ওভারহেড থাকে)। যখন এই সীমাটি পৌঁছে যায়, আমরা কাজগুলি সারি শুরু করি। যখনই কোনও থ্রেড নিখরচায় পরিণত হবে তখনই এটি একটি নতুন কার্য নির্ধারিত হবে। এইভাবে, এটি মসৃণভাবে যেতে পারে।

সুতরাং, আমি যা ভেবেছিলাম তা ছিল। এই ধারণাটি কি ভাল? আমি এই সমস্ত প্রক্রিয়া এবং থ্রেড স্টাফের জন্য কিছুটা নতুন, তাই এতে কোনও দক্ষতা রাখবেন না। আপনার মতামত শেয়ার করুন।

ধন্যবাদ। :)


দয়া করে নোট করুন: শ্রমিকরা ব্রাউজারের নির্দিষ্টকরণ J জাভাস্ক্রিপ্ট বৈশিষ্ট্য নয়।
ফ্রেড দ্য ওয়েইগগুই

ঠিক আছে, আমি এটি দেখতে। আমার প্রশ্নটি নোড.জেএস - সার্ভার কোড সম্পর্কে এবং ক্লায়েন্টের পক্ষের সম্পর্কে নয়!
পার্থ ঠাকর

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

উত্তর:


330

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

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

- আরে, হাসান, আমি মনে করি আপনি আমার নানার সময় থেকেই নবাগত বা খুব পুরানো স্কুল !!! আপনি কিছু থ্রেড তৈরি এবং এটি আরও দ্রুত তৈরি করেন না কেন?

- ওহ, আমাদের কেবল একটি সিপিইউ কোর আছে।

-- তাতে কি? কিছু থ্রেড তৈরি করুন ম্যান, এটি দ্রুত করুন!

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

- ঠিক আছে ঠিক আছে, আমি দেখছি তুমি দরিদ্র। আসুন আমার কম্পিউটারটি ব্যবহার করা যাক, এতে 32 টি কোর রয়েছে!

- বাহ, আপনি দুর্দান্ত বন্ধু আমার প্রিয় বন্ধু, আপনাকে অনেক ধন্যবাদ। আমি এটিকে সমর্থন করি!

তারপরে আমরা কাজে ফিরে যাই। এখন আমাদের 32 জন সিপিইউ কোর রয়েছে আমাদের সমৃদ্ধ বন্ধুকে ধন্যবাদ। আমাদের যে বিধিগুলি মেনে চলতে হবে তা সবেমাত্র পরিবর্তিত হয়েছে। আমাদের দেওয়া সমস্ত সম্পদ এখন আমরা কাজে লাগাতে চাই।

একাধিক কোর ব্যবহার করার জন্য, আমাদের কাজগুলিকে টুকরো টুকরো করে বিভক্ত করার একটি উপায় খুঁজে বের করতে হবে যা আমরা সমান্তরালে পরিচালনা করতে পারি। যদি এটি নোড না হয় তবে আমরা এর জন্য থ্রেড ব্যবহার করব; 32 থ্রেড, প্রতিটি সিপিইউ কোরের জন্য একটি। তবে, যেহেতু আমাদের নোড রয়েছে তাই আমরা 32 নোড প্রক্রিয়া তৈরি করব।

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

- আরে, হাসান, আপনি এখনও একক থ্রেডযুক্ত কাজ করছেন? কি হয়েছে তোমার? আপনি যা চেয়েছিলেন তা আমি আপনাকে কেবল সরবরাহ করেছি। আপনার আর কোনও অজুহাত নেই। থ্রেড তৈরি করুন, এটি দ্রুত চালিত করুন।

- আমি কাজটি টুকরো টুকরো করে ফেলেছি এবং প্রতিটি প্রক্রিয়া এই টুকরোগুলির একটিতে সমান্তরালে কাজ করবে।

- আপনি থ্রেড তৈরি করেন না কেন?

- দুঃখিত, আমি এটি ব্যবহারযোগ্য বলে মনে করি না। আপনি চাইলে আপনার কম্পিউটার নিতে পারবেন?

- না ঠিক আছে, আমি শান্ত, আমি শুধু বুঝতে পারি না আপনি থ্রেড ব্যবহার করেন না কেন?

- কম্পিউটারের জন্য আপনাকে ধন্যবাদ। :) আমি ইতিমধ্যে কাজটিকে টুকরো টুকরো করে ফেলেছি এবং আমি এই টুকরোগুলিকে সমান্তরালভাবে কাজ করার প্রক্রিয়া তৈরি করি। সমস্ত সিপিইউ কোর পুরোপুরি ব্যবহার করা হবে। আমি প্রক্রিয়াগুলির পরিবর্তে থ্রেড দিয়ে এটি করতে পারি; তবে নোডের এই পথ রয়েছে এবং আমার বস পার্থ ঠাকর চান যে আমি নোড ব্যবহার করব।

- ঠিক আছে, আপনার যদি অন্য কম্পিউটারের দরকার হয় তবে আমাকে জানান। : P

যদি আমি ৩৩ টির পরিবর্তে ৩৩ টি প্রক্রিয়া তৈরি করি তবে অপারেটিং সিস্টেমের শিডিয়ুলার একটি থ্রেড থামিয়ে দিবে, অন্যটি শুরু করবে, কিছু চক্রের পরে বিরতি দিন, অন্যটি আবার শুরু করুন ... এটি অপ্রয়োজনীয় ওভারহেড। আমি এটা চাই না. বস্তুত, 32 কোর কোনো সিস্টেমে, আমি ঠিক 32 প্রসেস তৈরি করতে চান না, 31 হতে পারে সুন্দর । কারণ কেবলমাত্র আমার অ্যাপ্লিকেশনই এই সিস্টেমে কাজ করবে না। অন্যান্য জিনিসের জন্য একটু ঘর রেখে দেওয়া ভাল হতে পারে, বিশেষত যদি আমাদের কাছে 32 টি রুম থাকে।

আমি বিশ্বাস করি সিপিইউ-নিবিড় কাজের জন্য প্রসেসরগুলির পুরোপুরি ব্যবহার সম্পর্কে আমরা এখন একই পৃষ্ঠায় আছি ।

- হুম, হাসান, তোমাকে একটু উপহাস করার জন্য আমি দুঃখিত sorry আমি বিশ্বাস করি আমি আপনাকে এখন আরও ভাল করে বুঝতে পারি। তবে এর জন্য আমার এখনও একটি ব্যাখ্যা দরকার এমন কিছু আছে: কয়েকশ থ্রেড চালানো সম্পর্কে সমস্ত গুঞ্জন কী? আমি সর্বত্রই পড়েছি যে থ্রেডগুলি তৈরির প্রক্রিয়াগুলির তুলনায় ফর্ম এবং বোবা আরও দ্রুততর? আপনি থ্রেডের পরিবর্তে প্রক্রিয়াগুলি কাঁটাচামচ করেন এবং আপনি নোডের সাথে সর্বাধিক পাওয়া উচিত বলে মনে করেন। তাহলে নোড কি এই ধরণের কাজের জন্য উপযুক্ত নয়?

- কোনও উদ্বেগ নেই, আমিও শান্ত। প্রত্যেকেই এই কথাগুলি বলে তাই আমার মনে হয় আমি সেগুলি শুনতে অভ্যস্ত।

- তাই তো? নোড এই জন্য ভাল না?

- থ্রেডগুলিও ভাল হতে পারে যদিও নোড এটির জন্য পুরোপুরি ভাল। থ্রেড / প্রক্রিয়া তৈরির ওভারহেড হিসাবে; আপনি যে জিনিসগুলিকে প্রচুর পুনরাবৃত্তি করেন সেগুলিতে প্রতিটি মিলিসেকেন্ড গণনা করে। যাইহোক, আমি কেবল 32 টি প্রক্রিয়া তৈরি করি এবং এতে অল্প পরিমাণ সময় লাগবে। এটি একবারেই ঘটবে। এতে কোনও তফাত হবে না।

- আমি কখন হাজার হাজার থ্রেড তৈরি করতে চাই?

- আপনি কখনও হাজার হাজার থ্রেড তৈরি করতে চান না। যাইহোক, এমন কোনও সিস্টেমে যা কাজ করে যা বাইরে থেকে আসে যেমন কোনও ওয়েব সার্ভারের মতো HTTP অনুরোধগুলি প্রক্রিয়া করে; আপনি যদি প্রতিটি অনুরোধের জন্য কোনও থ্রেড ব্যবহার করছেন তবে আপনি প্রচুর থ্রেড তৈরি করবেন them

- নোড যদিও আলাদা? রাইট?

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

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

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

- তাহলে কীভাবে কোনও প্রক্রিয়া একবারে 2 টি অনুরোধ পরিচালনা করতে পারে?

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

- হুম, এখন কি আমার উত্তেজিত হওয়া উচিত?

- হতে পারে :) নোড একটি সারি ধরে একটি লুপ চালায়। এই কাতারে রয়েছে আমাদের কাজগুলি, যেমন, কলগুলি আমরা আগত অনুরোধগুলি প্রক্রিয়া করতে শুরু করি। এখানে সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হ'ল আমরা আমাদের ফাংশনগুলি চালানোর জন্য ডিজাইন করি। কোনও অনুরোধ প্রক্রিয়া শুরু করার পরিবর্তে এবং কলারটি আমাদের কাজ শেষ না হওয়া পর্যন্ত অপেক্ষা করার পরিবর্তে, আমরা গ্রহণযোগ্য পরিমাণ কাজ করার পরে দ্রুত আমাদের ফাংশনটি শেষ করি। যখন আমরা এমন একটি জায়গায় পৌঁছে যাই যেখানে আমাদের অন্য উপাদানটির জন্য কিছু কাজ করার জন্য অপেক্ষা করতে হবে এবং আমাদের একটি মান ফিরিয়ে দিতে হবে, তার অপেক্ষা না করে আমরা কেবল বাকী কাজ সারিতে যুক্ত করে কেবল আমাদের ফাংশন শেষ করি।

- খুব জটিল মনে হচ্ছে?

- না না, আমি জটিল শুনতে পাচ্ছি; তবে সিস্টেম নিজেই খুব সহজ এবং এটি সঠিক ধারণা দেয়।

এখন আমি এই দুটি বিকাশকারীদের মধ্যে কথোপকথনের উদ্ধৃতি বন্ধ করতে চাই এবং এই ফাংশনগুলি কীভাবে কাজ করে তার এক চটজলদি উদাহরণের পরে আমার উত্তরটি শেষ করতে চাই।

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

নীচে একটি সহজ উদাহরণ যেখানে আমরা একটি ফাইল খুলি এবং ডেটাতে কিছু কাজ করার জন্য এটি পড়ি।

সিঙ্ক্রোনাস ওয়ে:

Open File
Repeat This:    
    Read Some
    Do the work

অ্যাসিনক্রোনাস ওয়ে:

Open File and Do this when it is ready: // Our function returns
    Repeat this:
        Read Some and when it is ready: // Returns again
            Do some work

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

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


(1) আপনি যদি অন্য ভাষাতে সি / সি +++ এর মতো লাইব্রেরি তৈরি না করেন তবে আপনি যদি এখনও বিভাজনের জন্য থ্রেড তৈরি করেন না। এই ধরণের কাজের জন্য আপনার দুটি থ্রেড রয়েছে যার একটি নোডের সাথে যোগাযোগ চালিয়ে যাবে এবং অন্যটি আসল কাজ করে।

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

আপডেট (মন্তব্যে একটি ভাল প্রশ্নের উত্তর হিসাবে)

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

setTimeout(...,0)কল হিসাবে ; কখনও কখনও কাতারে কল করার জন্য প্রসেসিংয়ের অংশটি ভাগ করার জন্য সময় সাশ্রয়ী কাজের সময় বিরতি দেওয়া হয়। বিভিন্ন উপায়ে কাজগুলি ভাগ করা আপনাকে এগুলি থেকে বাঁচাতে পারে; কিন্তু তবুও, এটি সত্যই কোনও হ্যাক নয়, এটি কেবল ইভেন্টের সারিতে কাজ করার উপায়। এছাড়াও, process.nextTickএই লক্ষ্যের জন্য ব্যবহার করা আরও ভাল কারণ আপনি যখন ব্যবহার করবেন setTimeoutতখন সময় গণনা এবং সময় যাচাই করা প্রয়োজন হবে যখন process.nextTickআমরা সত্যই চাই: "আরে টাস্ক, সারির শেষে ফিরে যাও, আপনি আপনার ভাগ ব্যবহার করেছেন! "


9
অ্যামেজিং! অভিশাপ! আপনি যেভাবে এই প্রশ্নের উত্তর দিয়েছেন তা আমি পছন্দ করেছি! :)
পার্থ ঠাকর

48
অবশ্যই :) আমি সত্যিই বিশ্বাস করতে পারি না যে এই উত্তর-নিবন্ধটি নিচে ভোট দিয়ে চূড়ান্ত লোক রয়েছে! প্রশ্নকর্তা এটিকে "ড্যাম অ্যামেজিং!" এবং একজন বইয়ের লেখক আমাকে এটি দেখার পরে তাঁর ওয়েবসাইটে লেখার প্রস্তাব দিয়েছেন; তবে কিছু প্রতিভা সেখানে ভোট দেয়। আপনি কেন আপনার উজ্জ্বল বৌদ্ধিক গুণটি ভাগ করে নিচ্ছেন না? কেন সুন্দর কিছু আপনাকে এত ঝামেলা করে? আপনি কেন এমন লোকের কাছে পৌঁছানোর জন্য দরকারী কিছু আটকাতে চান যাঁরা সত্যিই এটি থেকে উপকৃত হতে পারেন?
হাসানয়াসিন

9
এটি সম্পূর্ণ ন্যায্য উত্তর নয়। গণনামূলকভাবে ব্যয়বহুল কাজগুলির বিষয়ে কী, যেখানে আমরা আমাদের ফাংশন কলটি "দ্রুত শেষ" করতে পারি না? আমি বিশ্বাস করি কিছু লোক এর জন্য কিছু setTimeout(...,0)হ্যাক ব্যবহার করে তবে এই দৃশ্যে একটি পৃথক থ্রেড ব্যবহার করা আরও ভাল কি হবে?
এমপেন

3
@ হাসানাসিনিন নোডের এটাই সবচেয়ে সুন্দর ব্যাখ্যা যা আমি এখনও অবধি খুঁজে পেয়েছি! :)
ভেনেমো

7
@ মার্ক সাধারণতঃ যদি এটি গণনাগতভাবে ব্যয়বহুল হয় তবে পদক্ষেপ / প্রক্রিয়া কর্মীদের জন্য বিকল্পগুলি / মডিউলগুলি রয়েছে ... সাধারণভাবে এই ধরণের জিনিসগুলির জন্য, আমি একটি বার্তা সারি ব্যবহার করি, এবং কর্মী প্রক্রিয়া (এস) যা কোনও কাজ পরিচালনা করে es সারি থেকে সময়, এবং এই কাজটি। এটি একাধিক সার্ভারগুলিতে স্কেলিংয়ের অনুমতি দেয়। এই লাইনের পাশাপাশি সাবস্ট্যাকের প্রচুর পরিমাণে মডিউল রয়েছে যা আপনি নজর দিতে পারেন ing
ট্র্যাকার 1

34

(আপডেট 2016: ওয়েব কর্মীরা io.js - একটি নোড.জেএস কাঁটাচামচ নোড.জেএস ভি 7 - নীচে দেখুন into

(আপডেট 2017: ওয়েব কর্মীরা নোড.জেএস ভি 7 বা ভি 8 তে যাচ্ছেন না - নীচে দেখুন))

(আপডেট 2018: ওয়েব শ্রমিকদের হয় - নিচে দেখুন Node.js নোড v10.5.0 মধ্যে যাওয়া।)

কিছু স্পষ্টতা

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

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

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

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

তবে ওয়েব কর্মীদের এমনকি থ্রেড ব্যবহার করে প্রয়োগ করার প্রয়োজন নেই। আপনি ক্লাউডে প্রক্রিয়াগুলি, সবুজ থ্রেড বা এমনকি বিশ্রামের পরিষেবাগুলি ব্যবহার করতে পারেন - যতক্ষণ না ওয়েব কর্মী এপিআই ব্যবহৃত হয়। মান শব্দার্থক দ্বারা কল সহ এপিআই পাস করার বার্তাটির পুরো সৌন্দর্যটি হ'ল অন্তর্নিহিত বাস্তবায়নটি বেশ অপ্রাসঙ্গিক, কারণ চুক্তিযুক্ত মডেলের বিবরণ প্রকাশিত হবে না।

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

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

আমি মূলত বলেছিলাম যে ওয়েব কর্মীরা সার্ভার নয়, ব্রাউজারগুলির জন্য তৈরি হয়েছিল (এটি ভুলে যাচ্ছি যে এটি জাভাস্ক্রিপ্টের বেশ কিছু সম্পর্কেই বলা যেতে পারে) cla

নোড মডিউল

কিছু মডিউল রয়েছে যা নোডে ওয়েব কর্মীদের যুক্ত করার কথা রয়েছে:

আমি এগুলির কোনও ব্যবহার করি নি তবে আমার দুটি দ্রুত পর্যবেক্ষণ রয়েছে যা প্রাসঙ্গিক হতে পারে: মার্চ ২০১৫ অবধি, নোড-ওয়েবকর্মার সর্বশেষে 4 বছর আগে আপডেট হয়েছিল এবং নোড-ওয়েবকর্ম-থ্রেডগুলি সর্বশেষ এক মাস আগে আপডেট হয়েছিল। এছাড়াও আমি নোড-ওয়েবকর্মার-থ্রেড ব্যবহারের উদাহরণে দেখছি যে আপনি কোনও শ্রমিকের নির্মাণকারীর পক্ষে যুক্তি হিসাবে ফাইলের নামের পরিবর্তে একটি ফাংশন ব্যবহার করতে পারেন যা মনে হয় যে এটি স্মৃতি ভাগ করে নেওয়ার থ্রেড ব্যবহার করে প্রয়োগ করা হলে সূক্ষ্ম সমস্যার কারণ হতে পারে (যদি না ফাংশনগুলি কেবল তার। স্ট্রিং () পদ্ধতির জন্য ব্যবহৃত হয় এবং অন্যথায় অন্য পরিবেশে সংকলিত হয়, এটি ক্ষেত্রে ভাল হতে পারে - আমাকে এটির আরও গভীরভাবে তাকাতে হবে, কেবল আমার পর্যবেক্ষণগুলি এখানে ভাগ করে নেওয়া উচিত))

নোডে ওয়েব কর্মী এপিআই প্রয়োগ করে এমন কোনও প্রাসঙ্গিক প্রকল্প যদি থাকে তবে দয়া করে একটি মন্তব্য দিন।

আপডেট 1

লেখার সময় আমি এখনও এটি জানতাম না তবে ঘটনাচক্রে আমি এই উত্তরটি লেখার একদিন আগে আইও.জেএস-এ ওয়েব ওয়ার্কার্স যুক্ত হয়েছিল

( io.js হ'ল নোড.জেসের একটি কাঁটাচাঁটি - দেখুন: কেন io.js আরও তথ্যের জন্য মিকাল রজার্সের সাথে একটি ইনফো ওয়ার্ল্ড সাক্ষাত্কার নোড.জেস কাঁটাচামচ করার সিদ্ধান্ত নিয়েছে ))

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

আপডেট 2

আপডেট 1 এবং আমার টুইটগুলিতে আমি io.js এর পুল অনুরোধের কথা উল্লেখ করছিলাম # 1159 যা এখন নোড পিআর # 1159 তে পুনর্নির্দেশ করে যা 8 জুলাই বন্ধ ছিল এবং নোড পিআর # 2133 দ্বারা প্রতিস্থাপিত হয়েছিল - যা এখনও খোলা আছে। সেই টান অনুরোধগুলির অধীনে কিছু আলোচনা চলছে যা io.js / Node.js- এ ওয়েব কর্মীদের স্থিতির বিষয়ে আরও কিছু আধুনিক তথ্য সরবরাহ করতে পারে।

আপডেট 3

সর্বশেষ তথ্য - মন্তব্যগুলিতে পোস্ট করার জন্য নাইক্ক নিউম্যানকে ধন্যবাদ: শ্রমিকরা আছেন: পেটকা আন্তোনভ দ্বারা সেপ্টেম্বর 6, 2015 থেকে প্রাথমিক বাস্তবায়ন প্রতিশ্রুতিবদ্ধ যা এই গাছে ডাউনলোড করে দেখার চেষ্টা করা যেতে পারে । বিশদ জন্য NiCk নিউম্যান দ্বারা মন্তব্য দেখুন ।

আপডেট 4

২০১ 2016 সালের মে পর্যন্ত এখনও উন্মুক্ত পিআর # 2133 - এর শেষ মন্তব্যগুলি : প্রাথমিক বাস্তবায়ন 3 মাস বয়সী ছিল। ৩০ শে মে ম্যাথিউস মোরেয়েরা আমাকে নীচের মন্তব্যে এই উত্তরের একটি আপডেট পোস্ট করতে বলেছিলেন এবং তিনি পিআর মন্তব্যে এই বৈশিষ্ট্যের বর্তমান অবস্থা জিজ্ঞাসা করেছেন।

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

অন্যান্য সমস্ত মন্তব্য সেটিকে দ্বিতীয় বলে মনে হয়েছিল এবং ২০১ July সালের জুলাই পর্যন্ত মনে হচ্ছে যে ওয়েব ওয়ার্কারদের নোডের পরবর্তী সংস্করণ, version.০ সংস্করণ পাওয়া উচিত যা ২০১ October সালের অক্টোবরে প্রকাশ করার পরিকল্পনা করা হয়েছে (অগত্যা এই সঠিক পিআর আকারে নয়)।

মন্তব্যগুলিতে এটিকে নির্দেশ করার জন্য এবং গিটহাবের উপর আলোচনার পুনঃসজীবন করার জন্য ম্যাথিউস মোরেয়াকে ধন্যবাদ জানাই।

আপডেট 5

এর হিসাবে জুলাই 2016 প্রাসঙ্গিক মডিউল, সার্চ একটি সম্পূর্ণ তালিকা জন্য - সেখানে npm কয়েক মডিউল যা আগে উপলব্ধ ছিল না হয় npm শ্রমিকদের জন্য, ওয়েব শ্রমিক, ইত্যাদি নির্দিষ্ট কিছু করে বা আপনার জন্য কাজ করে না থাকে, তাহলে একটি পোস্ট করুন মন্তব্য নেই।

আপডেট 6

এর হিসাবে জানুয়ারী 2017 এটি অসম্ভাব্য ওয়েব শ্রমিকদের Node.js. মধ্যে মিশে গিয়ে তৈরি করা হবে

2121 কর্মীদের টানুন অনুরোধ : পেটকা আন্তোনভের 8 ই জুলাই, 2015 থেকে প্রাথমিক বাস্তবায়ন অবশেষে বেন নুরডহুইস 11 ডিসেম্বর, ২০১ 2016 এ বন্ধ করে দিয়েছিলেন যারা মন্তব্য করেছিলেন যে "মাল্টি-থ্রেডিং সমর্থন যথেষ্ট সুবিধা না পাওয়ার জন্য অনেকগুলি নতুন ব্যর্থতা মোড যোগ করেছে" এবং "আমরা আরও প্রচলিত উপায় যেমন ভাগ করা মেমরি এবং আরও দক্ষ সিরিয়ালাইজেশন ব্যবহার করে তা অর্জন করতে পারে। "

আরও তথ্যের জন্য গিটহাবের জনসংযোগ 2133 এ মন্তব্য দেখুন ।

মন্তব্যে এটিকে নির্দেশ করার জন্য আবার ম্যাথিউস মোরেয়াকে ধন্যবাদ।

আপডেট 6

আমি ঘোষণা করে খুশি হয়েছি যে কয়েকদিন আগে, জুন 2018 এ ওয়েব কর্মীরা নোড ভি 10.5.0 এ --experimental-workerপতাকা সহ সক্রিয় হওয়া একটি পরীক্ষামূলক বৈশিষ্ট্য হিসাবে উপস্থিত হয়েছিল ।

আরও তথ্যের জন্য, দেখুন:

🎉🎉🎉 অবশেষে! আমি আমার 3 বছরের পুরানো স্ট্যাক ওভারফ্লো উত্তরের 7 তম আপডেটটি করতে পারি যেখানে আমি যুক্তি দিয়েছি যে একটি লা ওয়েব কর্মীদের থ্রেড করা নোড দর্শনের বিরুদ্ধে নয়, কেবলমাত্র এই বারেই বলেছি যে আমরা শেষ পর্যন্ত পেয়েছি! 😜👍


1
@ নাইকিকে নিউম্যান ধন্যবাদ আমি দেখতে পাচ্ছি যে io.js এ আসল পুলের অনুরোধটি এখন বন্ধ হয়ে গেছে এবং অন্য একটিতে এটি প্রতিস্থাপন করা হয়েছে - সেখানে গিটহাবের সম্পর্কে টানার অনুরোধ মন্তব্যগুলিতে কিছু আলোচনা করার সাথে, সম্ভবত আপনি সেখানে কিছু তথ্য সন্ধান করতে সক্ষম হবেন। দেখুন: আমার উত্তরে আপডেট 2
আরএসপি

1
হ্যাঁ, দেখে মনে হচ্ছে তারা শেষ লিবুভ ইস্যুটি ঠিক করেছে। আমি যখন মডিউলটিতে আমার হাত পেতে পারি তখন অবাক হয়। অপেক্ষা করতে পারবো না! আমাদের আপডেট রাখার জন্য ধন্যবাদ ~ সম্পাদনা: সবেমাত্র শুরু হয়েছে: github.com/petkaantonov/io.js/commit/… আমরা যাচ্ছি, আসছে!
নাইক নিউম্যান

1
হ্যাঁ, এটা লাইভ (আনুষ্ঠানিকভাবে এখনও কার্যকর করা হয়নি) তবে আপনি উত্সটি এখানে ডাউনলোড করতে পারেন: github.com/petkaantonov/io.js/tree/… এবং আপনি যদি এটি পরীক্ষা করতে চান তবে সংকলন করুন! আমি এখন এটি করছি
Ni

1
@ নাইক্কিউইউম্যান নতুন তথ্যের জন্য ধন্যবাদ - আমি এটি উত্তরে যুক্ত করেছি।
আরএসপি

1
আপনি দয়া করে নোড.জেএস workersবাস্তবায়নের স্থিতিতে আমাদের আপডেট করতে পারেন ? PR # 2133 এ সর্বশেষ মন্তব্যগুলি ফেব্রুয়ারী থেকে; বিকাশকারীরা স্পষ্টতই একটি সমস্যায় পড়েছিল এবং এর সমাধান হওয়ার ইঙ্গিত দেয় এমন কোনও মন্তব্য নেই।
ম্যাথিউস মোরেইরা

8

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

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

সুতরাং এটি পছন্দ করুন বা সংকেত থ্রেড না মাল্টি-কোর বা সিঙ্গল কোর নয় আপনার প্রক্রিয়াগুলি প্রিম্পেট হবে এবং ওএস দ্বারা সময় কাটা হবে।

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

সুতরাং প্রথমত এটি আমাদের সফ্টওয়্যার ডিজাইনের সমস্ত। দ্বিতীয়ত প্রসঙ্গে স্যুইচিং সর্বদা ঘটছে যা তারা আপনাকে যা বলুক না কেন। থ্রেড সেখানে রয়েছে এবং এখনও একটি কারণে রয়েছে, কারণটি হল তারা তত্ক্ষণিক প্রক্রিয়াগুলির মধ্যে স্যুইচ করতে তত দ্রুত।

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

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


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

আমি মনে করি যে প্রধান পয়েন্টটি আমরা অনুপস্থিত তা হ'ল ওএসের অধীনে প্রক্রিয়াটি সর্বদা ন্যায়পরায়ণতার জন্য প্রিপ্রিমটিভ পদ্ধতিতে করা হবে। এছাড়াও একাধিক প্রসেসরের সাহায্যে আপনার প্রকৃত সমান্তরাল কোড সম্পাদন থাকতে পারে তবে তারপরেও আপনার প্রিম্পশন থাকবে। কিছু প্রক্রিয়াজাতকরণের জন্য অ্যাসিঙ্ক্রোনাস কাজও ওএস দ্বারা পরিচালিত হয়।
লিম্প্ল্যাশ

4

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


3
কেবল আপনার তথ্যের জন্য, ওয়েব ওয়ার্কার্স নোড.জেএস-তে (আংশিক) রূপান্তরিত হয়েছে। এবং node-workersপ্যাকেজ হিসাবে উপলব্ধ । এটি দেখুন: github.com/cramforce/node-worker
পার্থ

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

@ পার্থথাকর: এই প্রকল্পটি 3 বছরে স্পর্শ করা হয়নি (2 আপনি পোস্ট করার সময়), এবং এটি 0.0.0 এ অতিক্রান্ত হয়নি।
এমপেন

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

@ মার্ক: যদিও প্রকল্পটির ইতিহাস সম্পর্কে এটি উল্লেখ করা আপনার পক্ষে দুর্দান্ত ছিল। আমার ভবিষ্যতের প্রতিক্রিয়াগুলিতে এই জাতীয় বিষয়গুলি যত্ন নেওয়া হবে !! :)
পার্থ ঠাক্কর

3

worker_threadsকার্যকর করা হয়েছে এবং একটি পতাকার পিছনে প্রেরণ করা হয়েছে node@10.5.0। এটি এখনও একটি প্রাথমিক বাস্তবায়ন এবং ভবিষ্যতের প্রকাশগুলিতে এটি আরও কার্যকর করার জন্য আরও প্রচেষ্টা প্রয়োজন। সর্বশেষে এটি চেষ্টা করে দেখুন node


2

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

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

আপনার কোডে অ্যাসিক্রোনাস প্রোগ্রামিংয়ের সাথে ডিল করার জন্য (যেমন নেস্টেড কলব্যাক পিরামিডগুলি এড়ানো), ফাইবার্স লাইব্রেরিতে [ভবিষ্যত] উপাদানটি একটি শালীন পছন্দ। আমি আপনাকে ফাইবারের উপর ভিত্তি করে এসিঙ্কব্লকটি যাচাই করার পরামর্শ দিচ্ছি suggest ফাইবারগুলি দুর্দান্ত কারণ তারা আপনাকে স্ট্যাকটিকে নকল করে কলব্যাকটি আড়াল করার অনুমতি দেয় এবং তারপরে প্রয়োজনীয়তার সাথে একক থ্রেডের মধ্যে ঝাঁপিয়ে পড়ে। আপনাকে সুবিধাগুলি দেওয়ার সময় আপনাকে আসল থ্রেডের ঝামেলা বাঁচায়। ক্ষয়ক্ষতিটি হ'ল ফাইবার্স ব্যবহার করার সময় স্ট্যাকের চিহ্নগুলি কিছুটা অদ্ভুত হতে পারে তবে সেগুলি খুব খারাপ নয়।

আপনার যদি অ্যাসিঙ্ক স্টাফ সম্পর্কে চিন্তার দরকার না হয় এবং অবরুদ্ধ না করে প্রচুর প্রক্রিয়াজাতকরণে আরও আগ্রহী হন, তবে প্রসেস.নেক্সটটিক (কলব্যাক) এর জন্য একটি সাধারণ কল একবারে একবারে আপনার যা প্রয়োজন তা হল।


ভাল, আপনার পরামর্শ - গুচ্ছ সম্পর্কে - আমি প্রথমে যা ভেবেছিলাম তা ছিল। তবে এতে সমস্যাটি তাদের ওভারহেড - ভি 8 এর একটি নতুন উদাহরণটি প্রতিবারই একটি নতুন প্রক্রিয়াটি কাঁটাচামক করা শুরু করতে হবে (ms 30 এমএস, 10 এমবি)। সুতরাং, আপনি তাদের প্রচুর তৈরি করতে পারবেন না। এটি সরাসরি নোড ডক্স থেকে নেওয়া হয়েছে: এই শিশু নোডগুলি (চাইল্ড_প্রসেসগুলি সম্পর্কে) এখনও ভি 8 এর সম্পূর্ণ নতুন উদাহরণ
পার্থ ঠাক্কর

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

1

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

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

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