it-swarm.dev

عملية تابعة node.js - الفرق بين تفرخ وشوكة

قد يبدو هذا سؤالًا أساسيًا ، لكن لم أجد أي وثائق:

ما هو الفرق بين التفرع والبيض عملية node.js؟ لقد قرأت أن forking هو حالة خاصة من التفريخ ، ولكن ما هي حالات الاستخدام/reecussions الاستخدام المختلفة لاستخدام كل منها؟

121
Hitesh

Spawn هو أمر مصمم لتشغيل أوامر النظام. عندما تقوم بتشغيل البياض ، فأنت ترسل إليه أمر نظام سيتم تشغيله على طريقته الخاصة ، لكن لا يقوم بتنفيذ أي تعليمات برمجية أخرى ضمن عملية عقدتك. يمكنك إضافة مستمعين للعملية التي أنتجتها ، للسماح لتشفيرك بالتفاعل مع العملية الناتجة ، ولكن لم يتم إنشاء مثيل V8 جديد (ما لم يكن الأمر بالطبع هو أمر Node آخر ، ولكن في هذه الحالة يجب عليك استخدام fork!) نسخة واحدة فقط من وحدة العقدة الخاصة بك نشطة على المعالج.

Fork هي نسخة خاصة من البياض ، تعمل على نسخة حديثة من محرك V8. بمعنى أنه يمكنك إنشاء عدة عمال بشكل أساسي ، أو العمل على نفس قاعدة رمز العقدة ، أو ربما وحدة نمطية مختلفة لمهمة محددة. هذا مفيد للغاية لإنشاء تجمع عامل. في حين أن نموذج الحدث غير المتزامن للعقدة يسمح باستخدام نواة واحدة من الجهاز بكفاءة إلى حد ما ، فإنه لا يسمح لعملية العقدة باستخدام الآلات متعددة النواة. أسهل طريقة لتحقيق ذلك هي تشغيل نسخ متعددة من البرنامج نفسه ، على معالج واحد.

تعتبر القاعدة الأساسية للإبهام هي واحدة إلى عمليتين من العقدة لكل جوهر ، وربما أكثر بالنسبة إلى الأجهزة التي تتميز بنسبة ساعة/ذاكرة الوصول العشوائي/ساعة وحدة المعالجة المركزية جيدة ، أو لعمليات العقدة الثقيلة على I/O والضوء على عمل وحدة المعالجة المركزية ، لتقليل وقت تعطل الحدث حلقة ينتظر أحداث جديدة. ومع ذلك ، فإن الاقتراح الأخير هو الأمثل الجزئي ، وسوف تحتاج إلى قياس دقيق لضمان موقفك يناسب الحاجة إلى العديد من العمليات/الأساسية. يمكنك بالفعل خفض الأداء عن طريق وضع عدد كبير جدًا من العمال في جهازك/السيناريو.

في النهاية يمكنك استخدام تفرخ بطريقة فعلت أعلاه ، عن طريق إرسال تفرخ أمر العقدة. ولكن هذا سيكون سخيفًا ، لأن الشوكة تقوم ببعض الأشياء لتحسين عملية إنشاء مثيلات V8. مجرد توضيح ، أن تفرخ في نهاية المطاف يشمل شوكة. شوكة هو الأمثل فقط لهذه الحالة استخدام خاصة ومفيدة للغاية.

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

189
ChrisCM
  • تفرخ - child_process.spawn تطلق عملية جديدة بأمر معطى.
  • fork - The child_process.fork الطريقة هي حالة خاصة من spawn () لإنشاء عمليات تابعة.

طريقة التفريخ

تقوم طريقة child_process.spawn بتشغيل عملية جديدة باستخدام أمر محدد. لديه التوقيع التالي -

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

اقرأ المزيد عن الخيارات

الأسلوب spawn () يُرجع التدفقات (stdout & stderr) ويجب استخدامه عندما تُرجع العملية كمية كبيرة من البيانات. يبدأ spawn () في تلقي الاستجابة بمجرد بدء تنفيذ العملية.

طريقة الشوكة

child_process.fork الطريقة هي حالة خاصة من تفرخ () لإنشاء عمليات عقدة. لديه التوقيع التالي -

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

تقوم طريقة الشوكة بإرجاع كائن مع قناة اتصال مضمّنة بالإضافة إلى امتلاك جميع الطرق في مثيل ChildProcess عادي.

3
Igor Litvinovich

TLDR

Spawn

عندما يتم إنشاء spawn- يقوم بإنشاء واجهة دفق بين العملية الأصل والتابعة

شوكة

عندما يتم إنشاء شوكة- يقوم بإنشاء قناة اتصال بين العملية الأصل والتابعة

فرق

حسنًا ، كلاهما يبدو نوعًا من القيام بنقل البيانات نفسه ، باستثناء الفارق

spawn سيكون مفيدًا عندما تريد القيام بذلك نوع مستمر من التشغيل مثل البيانات التي تقرأ/تكتب في الدفق

fork سيكون مفيدًا عندما تريد أن تفعل messaging

الخلاصة

يجب استخدام {spawn من أجل التدفق البيانات/الملفات/الصور الكبيرة من spawn العملية إلى الأصل العملية

يجب استخدام {fork للقيام بالرسائل.

  • Eg افترض أنه تم إنشاء 10 عملية شوكة من أصل.
  • وكل عملية تنفذ بعض العمليات
  • وكل عملية على إكمال العملية سوف ترسل رسالة إلى الوالد ' العملية رقم 4 التي تم تنفيذها ' ، ' العملية رقم 8 التي تمت '
0
vijay