برنامه نویسی

درک حلقه رویداد در node.js: یک راهنمای گام به گام

مقدمه

node.js است تک رشته، اما به طور موثری با استفاده از آن ، همزمان را کنترل می کند معماری رویداد محور ، بدون مسدود کنندهبشر در حلقه رویداد در قلب این مکانیسم قرار دارد و مدیریت عملیات ناهمزمان مانند وظایف I/O ، تایمرها و تماس های تماس تلفنی است.

در این وبلاگ ، ما تجزیه خواهیم کرد:

  • در پشته تماس
  • در API های وب
  • در صف ریزگردها
  • در صف کارک ماس (صف تماس)
  • در حلقه رویداد

در پایان ، شما خواهید فهمید چگونه node.js JavaScript را بطور غیر همزمان اجرا می کند و چرا برخی از تماس های تماس قبل از دیگران اجرا می شوند.


1. پشته تماس بگیرید

در پشته تماس دنبال می کند Last In ، First Out (Lifo) اصل و مسئولیت اجرای توابع JavaScript را بر عهده دارد.

مثال:

function greet() {
    console.log("Hello, World!");
}
greet();
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جریان اعدام:

  1. greet() روی پشته تماس هل داده می شود.
  2. console.log() درون greet() روی پشته فشار می یابد.
  3. “سلام ، جهان!” چاپ شده است
  4. console.log() خاموش شده است
  5. greet() خاموش شده است

وقتی پشته است خالی، node.js می تواند اجرا کند کارهای ناهمزمان از صف ها


2. API های وب (Node.js API)

عملیات ناهمزمان مانند settimeout ، وظایف I/O و درخواست های HTTP به آنها واگذار شده اند API های وب در مرورگر یا node.js apis در زمان اجرا

مثال:

console.log("Start");

setTimeout(() => {
    console.log("Timeout Callback");
}, 0);

console.log("End");
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جریان اعدام:

  1. “شروع” وارد شده است.
  2. setTimeout() یک تماس تلفنی را ثبت می کند API های وببشر
  3. “پایان” وارد شده است.
  4. در حلقه رویداد حرکت می کند setTimeout() پاسخ به صف تماس و بعد از خالی بودن پشته تماس ، آن را اجرا می کند.

خروجی:

Start
End
Timeout Callback
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

حتی با 0ms، پاسخ به تایمر پس از کد همزمان اجرا می شود زیرا به صف تماسبشر


3. صف میکرو کار

در صف میکرو کار (یا صف کار) داشتن اولویت بالاتر از صف تماس (صف کلان کار)بشر

شامل:

  • وعده ها (.then()با .catch()با .finally())
  • process.nexttick () (فقط node.js ، حتی اولویت بالاتر از وعده ها)

مثال:

console.log("Start");

setTimeout(() => console.log("setTimeout"), 0);

Promise.resolve().then(() => console.log("Promise"));
process.nextTick(() => console.log("process.nextTick"));

console.log("End");
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جریان اعدام:

  1. “شروع” وارد شده است.
  2. setTimeout() حرکت به صف تماسبشر
  3. Promise.then() حرکت به صف میکرو کاربشر
  4. process.nextTick() حرکت به صف میکرو کار (اولویت بالاتر از وعده ها).
  5. “پایان” وارد شده است.
  6. ابتدا میکروتاسک ها را اجرا کنید:

    • “Process.NextTick” چاپ می شود.
    • “قول” چاپ شده است.
  7. کارهای کلان را اجرا کنید:

خروجی:

Start
End
process.nextTick
Promise
setTimeout
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


4. صف ماکرو (صف تماس)

در صف کار تماس های برگشتی از:

  • settimeout ()
  • setInterval ()
  • setimmediate ()
  • وظایف I/O (fs.readfile ، درخواست های شبکه ، نمایش داده های پایگاه داده)
  • تماس های تماس تلفنی پیام

مثال:

setTimeout(() => console.log("setTimeout"), 0);
setImmediate(() => console.log("setImmediate"));
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بسته به زمینه اعدام ، یا محل استقرار یا دارای پیش بینی ممکن است اول اجرا شود.


5. حلقه رویداد: سفارش اعدام

در حلقه رویداد این دستور را دنبال می کند:

  1. تمام کد همزمان را اجرا کنید (پشته تماس)
  2. اجرای فرآیند. nextTick ()
  3. میکروتاسک ها را اجرا کنید (وعده ها ، async/در انتظار)
  4. اجرای کارهای کلان (settimeout ، i/o ، setimmediate)
  5. چرخه را تکرار کنید

مثال کامل:

console.log("Start");

setTimeout(() => console.log("setTimeout"), 0);
setImmediate(() => console.log("setImmediate"));

Promise.resolve().then(() => console.log("Promise"));
process.nextTick(() => console.log("process.nextTick"));

console.log("End");
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سفارش اعدام:

  1. “شروع” چاپ می شود.
  2. setTimeout() حرکت به صف کاربشر
  3. setImmediate() حرکت به صف کاربشر
  4. Promise.then() حرکت به صف میکرو کاربشر
  5. process.nextTick() حرکت به صف میکرو کار (اولویت بالاتر از وعده ها).
  6. “پایان” چاپ شده است.
  7. ابتدا میکروتاسک ها را اجرا کنید:

    • “Process.NextTick” چاپ می شود.
    • “قول” چاپ شده است.
  8. کارهای کلان را اجرا کنید:

    • “Settimeout” چاپ شده است.
    • “setimmediate” چاپ می شود.

خروجی نهایی:

Start
End
process.nextTick
Promise
setTimeout
setImmediate
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


6 خلاصه

کارهای میکرو (اولویت بالاتر)

process.nexttick () (فقط node.js ، بالاترین اولویت)
وعده ها (.then()با .catch()با .finally())
MutationObservers (فقط مرورگر)

کارهای کلان (اولویت پایین)

settimeout () ، setInterval ()
setimmediate () (اجرای بعد از وظایف I/O)
عملیات I/O (fs.readfile ، درخواست های شبکه)
تماس های تماس تلفنی پیام

سفارش اعدام:

  1. کد هماهنگ (پشته تماس)
  2. process.nextTick ()
  3. وعده ها (ریزگردها)
  4. کارهای کلان (settimeout ، setInterval ، setimmediate ، وظایف I/O)

7. نتیجه گیری

در حلقه رویداد ستون فقرات اجرای ناهمزمان Node.js است. درک آن به:

  • نوشتن کد کارآمد و غیر مسدود کنندهبشر
  • اجتناب جهنم تماس تلفنیبشر
  • بهینه سازی عملکرد در برنامه های کاربردی بالابشر

مراحل بعدی:

ترکیب های مختلف عملیات async را امتحان کنیدبشر
از وعده ها و Async/در انتظار کد پاک تر استفاده کنیدبشر
با وظایف سیستم شبکه و فایل در node.js آزمایش کنیدبشر

آیا می خواهید یک نمایش بصری یا یک نسخه ی نمایشی تعاملی باشد؟ به من اطلاع دهید!

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا