node.js শিশু প্রক্রিয়া - স্প্যান এবং কাঁটাচামচ মধ্যে পার্থক্য


141

এটি একটি প্রাথমিক প্রশ্নের মতো মনে হতে পারে তবে আমি কোনও ডকুমেন্টেশন খুঁজে পাইনি:

একটি নোড.জেএস প্রক্রিয়া কাঁটাচামচ করা এবং তৈরি করার মধ্যে পার্থক্য কী? আমি পড়েছি যে কাঁটাচামচ স্পাওনের একটি বিশেষ কেস, তবে সেগুলির প্রতিটি ব্যবহারের জন্য বিভিন্ন ব্যবহারের ক্ষেত্রে / তিরস্কারগুলি কী কী?

উত্তর:


215

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

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

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

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

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback


@ ক্রিসিসএম, আমি যদি var child = require('child_process').fork('child.js');আমার প্রধান অ্যাপ্লিকেশনটিতে উদাহরণস্বরূপ বলতে পারি তবে আমার এখন 2 টি পৃথক কোর চলবে। যদি আমি চাইল্ড.জেএস (প্রক্রিয়া) এ লুপের জন্য ভারী চালনা করতাম তবে আমি মূলত পাওয়ার চাইল্ড.জেজে আরও কোর ব্যবহার করব, তাই না? সেই সিপু ব্যবহারটি যদিও আমার মূল অ্যাপ্লিকেশন কোরকে প্রভাবিত করবে?
নিকক নিউম্যান

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

@ ক্রিসিসএম হ্যাঁ, আমি দানব অবস্থানটি সুসংগত করতে বিশ্বব্যাপী মনস্টারলুপ ব্যবহার করি এবং যে বস্তুটি এটি পুনরুক্ত করে দেয় এটি 5000 টির মতো কী হতে পারে। আমি প্রতি 2 সেকেন্ডের মধ্যে এটির পুনরাবৃত্তি করি এবং দৃking়ভাবে মনে হয় এটি আমার সিপিইউ (মূল খেলা এক) থেকে কয়েকশ মেমোরি ব্যবহার বন্ধ করে দিচ্ছে। আমি বরং এই লুপটি ক্লাস্টারিংয়ের পরিবর্তে এইভাবে করবো এবং আমার প্রতি প্রতিটি কোরের পরিমাণে এটি এক্সএক্স পরিমাণ চালিয়ে দেবে ... আপনার অন্তর্দর্শনের জন্য টাই ~ এখন আমি কেবল জানি না যে আমার রেডিস বা অভ্যন্তরীণ আইপিসি ব্যবহার করা উচিত কিনা: পি
নিকক নিউম্যান

2
"কেন" সম্বোধনের জন্য আপনাকে ধন্যবাদ - আমি যতগুলি পোস্ট পড়েছি এ পর্যন্ত এটির ব্যাখ্যাটির সেই সহজ অংশটি মিস করেছেন।
আআআআআআআআআআআআআআআআআআআআআআআ।

@ ক্রিসিসএম আপনার উত্তরটিতে ".. তবে আপনার নোড প্রক্রিয়াতে আর কোনও কোড কার্যকর করা হয় না .."। এর অর্থ কী যে মূল থ্রেড অপেক্ষা করছে এবং কোনও প্রক্রিয়াজাত করছে না ... যদি হ্যাঁ তবে এখানে স্প্যান ব্যবহারের কী লাভ ..?
অভি

9

TLDR

Spawn

যখন একটি স্প্যান তৈরি হয় - এটি পিতামাতা এবং শিশু প্রক্রিয়াটির মধ্যে একটি স্ট্রিমিং ইন্টারফেস তৈরি করে।

স্ট্রিমিং ইন্টারফেসের অর্থ - ইন বাইনারি ফর্ম্যাটে ডেটা বাফারিংONE TIME

Fork

যখন একটি কাঁটাচামচ তৈরি করা হয় - এটি পিতামাতা এবং শিশু প্রক্রিয়াটির মধ্যে একটি যোগাযোগের চ্যানেল তৈরি করে

যোগাযোগ চ্যানেলটির অর্থ - মেসেজিং

Difference

ঠিক আছে উভয়ই একই রকম ডেটা ট্রান্সফারটি দেখায় , নীচের পার্থক্য বাদে

বাইনারি / এনকোডিং ফর্ম্যাটে অবিচ্ছিন্ন ডাটা বাফার করতে চাইলে স্প্যান কার্যকর হবে , যেমন - 1 জিবি ভিডিও ফাইল, চিত্র, লগ ইন ফাইলগুলিতে স্থানান্তর করুনONE TIME

যখন আপনি বার্তা বার্তা - JSONবা XMLডেটা মেসেজিং করতে চান তখন কাঁটাচটি কার্যকর হবে

Conslusion

ডিম জন্য ব্যবহার করা উচিত স্ট্রিমিং বড় তথ্য / ফাইল / থেকে চিত্রগুলি ডিম প্রক্রিয়া পিতা বা মাতা প্রক্রিয়া

জসন / এক্সএমএল মেসেজিংয়ের জন্য কাঁটাচামচ ব্যবহার করা উচিত।

  • যেমন ধরুন 10 টি কাঁটাচামচ প্রক্রিয়া পিতামাতার কাছ থেকে তৈরি হয়েছে।
  • এবং প্রতিটি প্রক্রিয়া কিছু অপারেশন সম্পাদন করে
  • এবং অপারেশন সম্পন্ন করার প্রতিটি প্রক্রিয়া পিতামাতাকে ' প্রসেস নং 4 সম্পন্ন ', ' প্রক্রিয়া নং 8 সম্পন্ন করা ' বার্তা দেবে

কোনও সন্তানের মধ্যে পিতা-মাতার কাছ থেকে অবিচ্ছিন্ন লগিং ডেটা এবং শেষ পর্যন্ত কোনও ফাইলের মধ্যে কী?
এসকরোথ

1
@ এসকারুথ, আপনার এটি সনাক্ত করা দরকার যে এটি ধারাবাহিক স্ট্রিম বা বার্তা হবে। এবং আপনি "অবিচ্ছিন্ন লগিং" শব্দটি ব্যবহার করেছেন বলে আমি বিশ্বাস করি আপনি সন্তানের কাছে লগগুলি (জেএসএন) আঁকিয়ে যাবেন, যদি হ্যাঁ তবে FORKঅন্যটি ব্যবহার করুন যদি আপনি বুফারড হওয়ার জন্য খুব বড় ডেটা ব্যবহার করেন তবে ব্যবহার করুনSPAWN
বিজয়

5
  • স্প্যান - চাইল্ড_প্রসেস.স্পান প্রদত্ত কমান্ড সহ একটি নতুন প্রক্রিয়া শুরু করে।
  • কাঁটাচামচ - চাইল্ড_প্রসেস.ফোর্ক পদ্ধতিটি শিশু প্রক্রিয়াগুলি তৈরি করার জন্য স্প্যান () এর একটি বিশেষ কেস ।

স্প্যান () পদ্ধতি

চাইল্ড_প্রসেস.স্পন পদ্ধতি প্রদত্ত কমান্ড সহ একটি নতুন প্রক্রিয়া আরম্ভ করে। এটিতে নিম্নলিখিত স্বাক্ষর রয়েছে -

child_process.spawn(command[, args][, options])

বিকল্প সম্পর্কে আরও পড়ুন

স্প্যান () পদ্ধতিটি স্ট্রিমগুলি (stdout & stderr) প্রদান করে এবং প্রক্রিয়াটি যখন ভলিউমের পরিমাণের পরিমাণ ফেরত দেয় তখন এটি ব্যবহার করা উচিত। প্রক্রিয়া সম্পাদন শুরু হওয়ার সাথে সাথে স্পন () প্রতিক্রিয়া পেতে শুরু করে।

কাঁটাচামচ () পদ্ধতি

চাইল্ড_প্রসেস.ফোর্ক পদ্ধতিটি নোড প্রক্রিয়াগুলি তৈরি করার জন্য স্প্যান () এর একটি বিশেষ কেস । এটিতে নিম্নলিখিত স্বাক্ষর রয়েছে -

 child_process.fork(modulePath[, args][, options])

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

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