در حال بارگذاری...

فرایندهای فرزند

در نود.جی‌اس، فرایندهای فرزند (Child Processes) به فرآیندهای مستقلی اطلاق می‌شوند که می‌توانند به موازات فرآیند اصلی اجرا شوند بدون آنکه Event Loop اصلی را مسدود کنند. استفاده از فرایندهای فرزند به توسعه‌دهندگان این امکان را می‌دهد که وظایف سنگین محاسباتی، پردازش داده‌های بزرگ یا اجرای موازی چندین کار را با کارایی بالا انجام دهند.
نود.جی‌اس امکانات متنوعی مانند fork، spawn و exec برای ایجاد فرایندهای فرزند ارائه می‌دهد. این فرایندها می‌توانند با فرآیند اصلی از طریق ارتباط بین فرآیندی (IPC) داده رد و بدل کنند. برای بهره‌گیری کامل از فرایندهای فرزند، توسعه‌دهندگان باید با سینتکس نود.جی‌اس، ساختارهای داده، الگوریتم‌ها و اصول OOP آشنا باشند.
در این آموزش، شما یاد می‌گیرید که چگونه فرایندهای فرزند ایجاد کنید، پیام‌ها را بین فرآیندها منتقل کنید، خطاها را مدیریت کنید و کارهای سنگین را به صورت موازی اجرا نمایید. پس از مطالعه این محتوا، قادر خواهید بود فرایندهای فرزند را به صورت امن و بهینه در پروژه‌های واقعی نود.جی‌اس پیاده‌سازی کنید و کارایی اپلیکیشن‌های خود را بهبود بخشید.

مثال پایه

text
TEXT Code
const { fork } = require('child_process');

// ایجاد یک فرایند فرزند ساده
const child = fork('./taskChild.js');

// ارسال پیام از فرآیند اصلی به فرایند فرزند
child.send({ task: 'sumCalculate', numbers: [1, 2, 3, 4, 5] });

// دریافت پیام از فرایند فرزند
child.on('message', (result) => {
console.log('نتیجه از فرایند فرزند:', result);
});

// مدیریت خطا
child.on('error', (err) => {
console.error('خطا در فرایند فرزند:', err);
});

// taskChild.js
process.on('message', (msg) => {
const sum = msg.numbers.reduce((a, b) => a + b, 0);
process.send(sum);
});

در این مثال، از fork برای ایجاد فرایند فرزند استفاده شده است که فایل taskChild.js را اجرا می‌کند. فرایند فرزند داده‌های ارسال‌شده توسط فرآیند اصلی را پردازش کرده و نتیجه را برمی‌گرداند. ارتباط بین فرآیند اصلی و فرایند فرزند با استفاده از child.send و process.on('message') انجام می‌شود که یک مکانیزم امن برای رد و بدل کردن داده فراهم می‌کند.
متد reduce برای محاسبه مجموع اعداد به صورت بهینه به کار رفته است. همچنین event خطا (error) به منظور مدیریت استثناها در فرایند فرزند استفاده شده است تا فرآیند اصلی تحت تأثیر خطاها قرار نگیرد. این نمونه ساختار پایه‌ای فرایندهای فرزند، تبادل پیام و بهترین شیوه‌های مدولار بودن کد در نود.جی‌اس را نمایش می‌دهد.

مثال کاربردی

text
TEXT Code
const { fork } = require('child_process');
const path = require('path');

const tasks = ['task1', 'task2', 'task3'];
const results = [];

tasks.forEach((taskName, index) => {
const child = fork(path.join(__dirname, 'worker.js'));

child.send({ task: taskName, data: Array.from({ length: 1000 }, (_, i) => i + 1) });

child.on('message', (result) => {
results[index] = result;
console.log(`فرایند فرزند ${taskName} تکمیل شد:`, result);

if (results.filter(Boolean).length === tasks.length) {
console.log('تمام فرایندهای فرزند تکمیل شدند:', results);
}
});

child.on('error', (err) => {
console.error(`خطا در فرایند فرزند ${taskName}:`, err);
});

});

// worker.js
process.on('message', (msg) => {
const sum = msg.data.reduce((acc, val) => acc + val, 0);
process.send(sum);
});

این مثال پیشرفته نشان می‌دهد چگونه چندین فرایند فرزند را به صورت موازی اجرا کنیم. هر فرایند به طور مستقل داده‌ها را پردازش کرده و نتیجه را به فرآیند اصلی ارسال می‌کند. استفاده از reduce محاسبات را بهینه می‌کند و نگهداری کد با جدا کردن منطق در worker.js آسان‌تر است. مدیریت خطا در هر فرایند فرزند اطمینان می‌دهد که مشکلات یک فرایند بر سایر فرآیندها تأثیر نگذارد. این الگو در پروژه‌های واقعی برای پردازش موازی و مدیریت وظایف سنگین بسیار کاربردی است.

بهترین شیوه‌ها شامل محدود کردن تعداد فرایندهای فرزند، مدیریت کامل خطاها، بهینه‌سازی حافظه و استفاده مجدد از فرآیندها است. اشتباهات رایج شامل عدم مدیریت خطاها، پروسه‌های بلااستفاده که باعث نشت حافظه می‌شوند و الگوریتم‌های ناکارآمد است. برای دیباگینگ، استفاده از logging ساختاریافته و پیگیری پیام‌ها توصیه می‌شود. بهینه‌سازی عملکرد شامل استفاده از process pools و الگوریتم‌های غیرهمزمان است. برای امنیت، اعتبارسنجی داده‌های ورودی و جلوگیری از اجرای کد ناامن ضروری است.

📊 جدول مرجع

نود.جی‌اس Element/Concept Description Usage Example
fork ایجاد یک فرایند فرزند مستقل const child = fork('./worker.js');
process.send ارسال داده به فرایند فرزند child.send({ task: 'sum', numbers: [1,2,3] });
child.on('message') دریافت پیام از فرایند فرزند child.on('message', msg => console.log(msg));
child.on('error') مدیریت خطا در فرایند فرزند child.on('error', err => console.error(err));
reduce محاسبات جمع‌آوری Array const sum = data.reduce((a,b)=>a+b,0);

فرایندهای فرزند در نود.جی‌اس امکان پردازش موازی را فراهم می‌کنند و Event Loop اصلی را مسدود نمی‌کنند. یادگیری ایجاد، مدیریت پیام‌ها، کنترل خطا و بهینه‌سازی عملکرد فرایندهای فرزند برای توسعه اپلیکیشن‌های مقیاس‌پذیر و کارآمد ضروری است. مراحل بعدی شامل مطالعه process pools، ماژول cluster و الگوهای پیشرفته asynchronous است. منابع آموزشی شامل مستندات رسمی نود.جی‌اس، پروژه‌های open-source و بهترین شیوه‌های جامعه توسعه‌دهندگان هستند.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

4
سوالات
🎯
70%
برای قبولی
♾️
زمان
🔄
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود