برنامه نویسی

process.nextTick() در مقابل process.setImmidiate()

تفاوت بین process.nextTick() و setImmediate() در Node.js در زمانی که آنها در حلقه رویداد اجرا می شوند قرار می گیرند:

1. process.nextTick()

  • زمان اجرا: process.nextTick() اجرا می شود قبل از هر کار ورودی/خروجی در حلقه رویداد، اما پس از اتمام عملیات جاری. زمان‌بندی می‌کند که تماس برگشتی بلافاصله پس از مرحله فعلی حلقه رویداد، قبل از ادامه حلقه رویداد، فراخوانی شود.
  • استفاده از مورد: معمولاً برای اطمینان از اجرای یک تابع پس از عملیات جاری اما قبل از پردازش هر رویداد ورودی/خروجی استفاده می‌شود. این می تواند زمانی مفید باشد که شما باید مطمئن شوید که کد خاصی قبل از هر چیز دیگری اجرا می شود (به عنوان مثال، مدیریت یک خطا قبل از ادامه سایر عملیات I/O).
  • رفتار: اگه زنگ بزنی process.nextTick() چندین بار در یک عملیات یکسان، می تواند یک اثر “گرسنگی” ایجاد کند، جایی که حلقه رویداد به طور نامحدود مشغول نگه داشته می شود و در صورت عدم استفاده با دقت منجر به انسداد می شود.

مثال:

console.log("start");

process.nextTick(() => {
  console.log("nextTick");
});

console.log("end");

خروجی:

start
end
nextTick

nextTick بعد از کد همزمان اجرا می شود (start و end) کامل می شود اما قبل از I/O یا تایمرها.

2. setImmediate()

  • زمان اجرا: setImmediate() اجرا می شود بعد از رویدادهای I/O در مرحله فعلی حلقه رویداد پردازش شده اند. زمانی که فاز I/O کامل شد، یک تماس برگشتی را برای اجرا در تکرار بعدی حلقه رویداد زمان‌بندی می‌کند.
  • استفاده از مورد: معمولاً برای اجازه دادن به رویدادهای ورودی/خروجی (مانند عملیات فایل یا تماس‌های شبکه) قبل از اجرای یک تماس مجدد استفاده می‌شود. می‌تواند برای تقسیم عملیات طولانی‌مدت به وظایف کوچک‌تر برای جلوگیری از مسدود کردن حلقه رویداد مفید باشد.
  • رفتار: بر خلاف process.nextTick()، setImmediate() حلقه رویداد را گرسنه نمی کند. این اجازه می دهد تا عملیات ورودی/خروجی در بین چند تماس فوری اجرا شود.

مثال:

console.log("start");

setImmediate(() => {
  console.log("setImmediate");
});

console.log("end");

خروجی:

start
end
setImmediate

setImmediate بعد از I/O و بعد از کد همزمان اجرا می شود (start و end) تکمیل می کند.

تفاوت های کلیدی

  • حکم اعدام:

    • process.nextTick() قبل از هر رویداد I/O یا تایمر در حلقه رویداد اجرا می شود.
    • setImmediate() بعد از رویدادهای ورودی/خروجی، در تکرار بعدی حلقه رویداد اجرا می‌شود.
  • مسدود کردن بالقوه:

    • process.nextTick() می‌تواند حلقه رویداد را در صورت استفاده بیش از حد مکرر مسدود کند، زیرا تا زمانی که همه تماس‌های NextTick پردازش نشود، اجرا می‌شود.
    • setImmediate() احتمال مسدود کردن حلقه رویداد کمتر است زیرا پس از انجام وظایف I/O، تماس برگشتی را برنامه ریزی می کند.
  • موارد استفاده:

    • استفاده کنید process.nextTick() زمانی که نیاز دارید به محض تکمیل عملکرد فعلی و قبل از پردازش سایر وظایف ورودی/خروجی، کاری را انجام دهید.
    • استفاده کنید setImmediate() زمانی که می خواهید یک کار را پس از اتمام تمام وظایف ورودی/خروجی فعلی و پس از تکرار حلقه رویداد فعلی انجام دهید.

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

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

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

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

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