برنامه نویسی

process.nexTick در مقابل setImmediate – انجمن DEV

process.nextTick و setImmediate دو تابع در Node.js هستند که برای زمان بندی اجرای توابع برگشت به تماس استفاده می شوند. آنها مشابه هستند اما زمان بندی و موارد استفاده متفاوتی دارند. در اینجا به تفکیک تفاوت های آنها به همراه نمونه هایی اشاره شده است:
process.nextTick

process.nextTick

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

Use Case: زمانی مفید است که بخواهید بلافاصله پس از عملیات جاری، اما قبل از هر گونه عملیات ورودی/خروجی یا تایمر، یک تماس برگشتی را اجرا کنید.

تنظیم فوری

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

Use Case: زمانی مفید است که بخواهید اجرای یک تابع را تا زمانی که رویدادهای ورودی/خروجی فعلی پردازش شوند به تعویق بیندازید.

Example


const fs = require('fs');

console.log('Start');

// Schedule with process.nextTick
process.nextTick(() => {
    console.log('Next Tick');
});

// Schedule with setImmediate
setImmediate(() => {
    console.log('Immediate');
});

// Read a file (simulates I/O operation)
fs.readFile(__filename, () => {
    console.log('File Read');

    // Schedule another nextTick inside I/O
    process.nextTick(() => {
        console.log('Next Tick inside I/O');
    });

    // Schedule another setImmediate inside I/O
    setImmediate(() => {
        console.log('Immediate inside I/O');
    });
});

console.log('End');

Expected Output

Start
End
Next Tick
File Read
Next Tick inside I/O
Immediate inside I/O
Immediate

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

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

توضیح

Initial Phase:
    console.log('Start') is executed.
    process.nextTick(() => { console.log('Next Tick'); }) schedules a callback to be executed after the current phase.
    setImmediate(() => { console.log('Immediate'); }) schedules a callback for the next iteration of the event loop.
    fs.readFile(__filename, () => { ... }) schedules an I/O operation.

After Initial Phase:
    console.log('End') is executed.
    process.nextTick callback is executed: console.log('Next Tick').

I/O Phase:
    File read operation completes, console.log('File Read') is executed.
    Inside the I/O callback:
        process.nextTick(() => { console.log('Next Tick inside I/O'); }) schedules another callback for the current phase.
        setImmediate(() => { console.log('Immediate inside I/O'); }) schedules another callback for the next iteration of the event loop.
    process.nextTick callback inside I/O is executed: console.log('Next Tick inside I/O').

Next Event Loop Iteration:
    All setImmediate callbacks are executed in order: console.log('Immediate inside I/O') and console.log('Immediate').
وارد حالت تمام صفحه شوید

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

خلاصه

process.nextTick executes the callback before the next I/O event.
setImmediate executes the callback after the current I/O events.
وارد حالت تمام صفحه شوید

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

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

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

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

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