چند نخی Multi threading و چند فرآیندی multiple process در Node.js

چند نخی Multi threading و چند فرآیندی multiple process در Node.js

بررسی چند نخی (Multi threading) و چند فرآیندی (multiple process) در Node.js

Node.js کدهای جاوا اسکریپت را در یک رشته اجرا می کند، به این معنی که کد شما تنها می تواند یک کار را در یک زمان انجام دهد. با این حال، Node.js خود چند رشته ای است و رشته های مخفی را از طریق کتابخانه libuv فراهم می کند، که عملیات I/O مانند خواندن فایل ها از دیسک یا درخواست های شبکه را مدیریت می کند. Node.js از طریق استفاده از رشته‌های مخفی، روش‌های ناهمزمانی را ارائه می‌کند که به کد شما اجازه می‌دهد بدون مسدود کردن رشته اصلی، درخواست‌های ورودی/خروجی را انجام دهد.

برای یادگیری مفهوم  چند نخی و چند فرآیندی به لینک سری بزنید.

چند نخی  Multi threading

اگرچه Node.js چند رشته ای واقعی را ارائه نمی دهد، می توانید چیزی مشابه با ماژول worker_threads برای Multi threading ایجاد کنید. 

ماژول worker_threads چیست؟

ماژول worker_threads شکلی از threading را پیاده سازی می کند که به شما امکان می دهد موازی سازی را به برنامه خود اضافه کنید. کد اجرا شده در یک thread worker در یک process فرزند جداگانه اجرا می شود و از مسدود کردن برنامه اصلی شما جلوگیری می کند.

برای مثال عملی به لینکهای زیر بروید.


https://snyk.io/blog/node-js-multithreading-with-worker-threads/

https://www.digitalocean.com/community/tutorials/how-to-use-multithreading-in-node-js

https://dev.to/johnjardincodes/managing-multiple-threads-in-node-js-3mpc

 

چند فرآیندی  multiple process

NodeJS با معماری بر اساس رویداد (event) طراحی شده است، که استفاده از ورودی و یا خروجی به طور asynchronous را فراهم می‌سازد. یک فرآیند (process) بلافاصله، به هنگام فراخوانی رویداد مرتبط اجرا می‌شود و این بدان معنی است که هیچ کدام از فرآیندها، thread را اشغال نمی‌کنند. 

معماری رویداد محوری (event-driven) که فرآیند‌ها را مسدود نمی‌کند (non-blocking)، این اجازه را به شما می‌دهد تا چندین فرآیند را به طور همزمان اجرا کنید، که باعث افزایش سرعت اجرای کد می‌شود.

چند نکته مهم:

  • Node.js از انشعاب چندین فرآیند (که بر روی هسته های مختلف اجرا میشوند) پشتیبانی می کند.
  • دانستن این نکته مهم است که state بین پروسه master و forked به اشتراک گذاشته نشده است.
  • می‌توانیم اسکریپت را به فرآیند forked (دیگر) ارسال کنیم و با ارسال اسکریپت، پاسخ را در فرایند master (اصلی)دریافت کنیم.
 

چرا و چه زمانی باید فرآیند دیگری را انجام دهیم؟

  • زمانی که به دلیل سرعت اپلیکیشن، نیاز به تفویض وظایف داریم  (آنها را به صورت موازی اجرا کنید) فرآیند دیگری را اجرا میکنیم.
  • Forking چندین فرآیند برای آزاد کردن حافظه و تخلیه یک فرآیند ضروری است.
 

می توان با ماژول child_process چند فرآیند را انجام داد.

مانند کد زیر:

server.js

const { fork } = require('child_process');
app.get('/endpoint', (request, response) => {
   // fork another process
   const process = fork('./send_mail.js');
   const mails = request.body.emails;
   // send list of e-mails to forked process
   process.send({ mails });
   // listen for messages from forked process
   process.on('message', (message) => {
     log.info(`Number of mails sent ${message.counter}`);
   });
   return response.json({ status: true, sent: true });
});

send_mail.js

async function sendMultipleMails(mails) {
   let sendMails = 0;
   // logic for
   // sending multiple mails
   return sendMails;
}
// receive message from master process
process.on('message', async (message) => {
  const numberOfMailsSend = await sendMultipleMails(message.mails); 
  
  // send response to master process
  process.send({ counter: numberOfMailsSend });
});
 

منابع:

 

https://itnext.io/multi-threading-and-multi-process-in-node-js-ffa5bb5cde98

https://snyk.io/blog/node-js-multithreading-with-worker-threads/

https://www.digitalocean.com/community/tutorials/how-to-use-multithreading-in-node-js

https://dev.to/johnjardincodes/managing-multiple-threads-in-node-js-3mpc

 

نویسنده :
مجید پورداود
  • مجید پورداود
  • مهندس نرم افزار و تحلیلگر ارشد سیستم های کامپیوتری تحت وب می باشم. از سال 1395 برنامه نویسی را شروع کردم و به زبان های php (فریم ورک laravel -codeigniter)  و زبان جاوا اسکریپت (فریم ورک express.js-nest.js)  تسلط دارم.  

ثبت دیدگاه جدید

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *