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.