بررسی NodeJs
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 4 دقیقه

بررسی NodeJs

هدف اصلی این مقاله توضیح "معماری Nodejs" و دانستن نحوه کار آن در پشت صحنه است.

به طور کلی، بیشتر زبان‌های سمت سرور مانند PHP ، ASP.NET، Ruby و NodeJs از معماری چند رشته‌ای (مالتی تردینگ) پیروی می‌کنند. این بدان معنی است که برای هر درخواست کلاینت، یک رشته جدید یا حتی یک روند جدید آغاز می‌شود.

در NodeJs، همه درخواست‌ها از کلاینت با استفاده از منابع مشترک همزمان با یک رشته تکمیل می‌شود، زیرا از "مدل حلقه رویداد تک رشته‌ای" پیروی می‌کند.

در این لینک می‌توانید آموزش نصب و راه‌اندازی Node را دنبال کنید.

معماری NodeJs

Event-loop چیست؟

برنامه نویسی Event-Loop (حلقه رویداد) یک کنترل جریان در برنامه‌ای است که توسط رویدادها تعریف می‌شود. اصل اساسی حلقه NodeJs مبتنی بر رویداد، اجرای مکانیسم مرکزی است که پس از روشن شدن یک برنامه، رویدادها را می‌شنود و توابع بازگشتی را فراخوانی می‌کند.

NodeJs یک حلقه رویداد است که برای دستیابی به رفتارهای ناهمگن غیر مسدود کننده در موتور V8 Google Chrome، یک مدل زمان اجرا را پیاده سازی می‌کند.

یک حلقه رویداد که توسط Node thread اجرا می‌شود تا پایان کار فعال می‌باشد. بنابراین، فرایند ثانویه را فعال می‌کند که به تابع شنونده رویداد علامت می‌دهد تا کار را به موقع انجام دهد.

به محض شروع کار NodeJs یک حلقه رویداد را آغاز کرده و اسکریپت ورودی داده شده شروع متغیر و یک اعلان تابع را پردازش می‌کند. این در نهایت باعث ایجاد فراخوانی‌های API ناهمزمان و تعیین تایمر زمان بندی می‌شود، سپس پردازش حلقه رویداد آغاز می‌شود.

در اینجا شبه کد نمونه‌ای آورده شده که به روشنی مدل را توضیح می‌دهد:

public class EventLoop {
while(true){
         if(Event Queue receives a JavaScript Function Call){
         ClientRequest request = EventQueue.getClientRequest();
                            If(request requires BlockingIO or takes more computation time)
                                    Assign request to Thread T1
                            Else
                                  Process and Prepare response
                  }
            }
}

برخی دیگر از اجزای جدایی ناپذیر این معماری NodeJs عبارتند از:

مدل I/O بدون بلوک

رشته اصلی Node منتظر چیزی به معنای واقعی کلمه، حتی برای تکمیل یک فرآیند ناهمزمان نیست. چنین بخش جدایی ناپذیری از معماری NodeJs شناخته شده است که مدل ورودی و خروجی غیر مسدود کننده است.

به صورت ساده، رشتههای اصلی در Node یک فرایند پس زمینه را اجرا میکند که منتظر خاتمه یافتن هیچ کار ناهمزمان نیست و سپس رشته اصلی آزاد می‌شود و به درخواست‌های دیگر برای روند اجرا اجازه می‌دهد.

رشته اصلی Node به طور مداوم بین درخواست‌های مختلف جابه‌جا می‌شود تا قسمت همزمان آن اجرا شود.

معماری مبتنی بر رویداد

رشته پس زمینه در معماری NodeJs از یک رویکرد Event-based (مبتنی بر رویداد) برای گزارش موضوع اصلی استفاده می‌کند. هر کار ناهمزمان از برخی توابع Callback مرتبط با آن تشکیل شده است.

پس از تکمیل فرایند غیرهمزمان، رشته پس زمینه یک رویداد را مطرح می‌کند. همه اینها برای گزارش رشته اصلی در مورد انجام فرایند غیرهمزمان است.

رشته اصلی مشغول پردازش سایر درخواست‌ها خواهد بود. در همین حال، درخواست در مورد پاسخ به رشته اصلی برای اجرا منتظر می‌ماند.

مراحل مختلف حلقه رویداد برای درک بهتر معماری NodeJs در زیر نشان داده شده است:

برخی از سوالات متداول و تصورات غلط درباره معماری NodeJs

آیا NodeJs کاملا تک رشته‌ای است؟

این یک باور غلط بسیار رایج در مورد معماری NodeJs است. Node بر روی یک رشته اجرا می‌شود، اما برخی از توابع آن در کتابخانه استاندارد NodeJs منطق خود را خارج از NodeJs تک رشته اجرا نمی‌کند. این عمل برای حفظ سرعت و عملکرد برنامه‌ها انجام شده است.

این رشته‌های دیگر از کجا تأمین می‌شوند؟

هنگام استفاده از NodeJs، یک ماژول کتابخانه ویژه برای انجام عملیات ناهمزمان استفاده می‌شود. همچنین با استفاده از منطق برگشتی Node به منظور مدیریت یک مجموعه نخ (رشته) مخصوص به نام استخر رشته libuv استفاده می‌شود.

این استخر چهار رشته‌ای است که برای پذیرفتن عملیاتی بسیار سنگین برای حلقه رویداد است. وظایف طولانی مدت ذکر شده در منطق حلقه رویداد برای حلقه رویداد بسیار پر هزینه است.

آیا حلقه رویداد یک ساختار پشته مانند است؟

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

امیدواریم این مقاله برایتان مفید واقع شود. اگر هرگونه سوال یا نظری دارید، در بخش زیر با ما در میان بگذارید.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@erfanheshmati
عرفان حشمتی
Full-Stack Web Developer

کارشناس معماری سیستم های کامپیوتری، طراح و توسعه دهنده وب سایت، تولیدکننده محتوا

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید