-
آموزش javascript
-
1401-11-15
-
482
-
0
بررسی چند نخی (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)، این اجازه را به شما میدهد تا چندین فرآیند را به طور همزمان اجرا کنید، که باعث افزایش سرعت اجرای کد میشود.
چند نکته مهم:
چرا و چه زمانی باید فرآیند دیگری را انجام دهیم؟
می توان با ماژول 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
ثبت دیدگاه جدید
0 دیدگاه
نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *