728x90
process.nextTick()
현재 진행 중인 작업의 완료 시점 뒤로 함수의 실행을 지연시킨다.
콜백을 인수로 취하여 대기 중인 I/O 이벤트 대기열의 앞으로 밀어 넣고 즉시 반환한다.
현재 진행중인 작업이 제어를 이벤트 루프로 넘기는 즉시 콜백이 실행된다.
process.nextTick()으로 지연된 콜백은 마이크로태스크라 불리며, 현재의 작업이 완료된 후에 바로 실행되며 다른 I/O 이벤트가 발생하기 전에 실행된다.
이미 예정된 I/O 보다 먼저 실행되기 때문에 재귀 호출과 같은 특정 상황에서 I/O 기아(starvation)을 발생시킬 수 있다.
setImmediate()와 setTimeout()
process.nextTick()과 목적은 유사하지만 그 의미는 다르다.
이미 큐에 있는 I/O 이벤트들의 뒤에 대기하게 된다.
특정 상황에서는 setImmediate로 예약된 콜이 setTimeout으로 예약된 것보다 빨리 실행된다.
function run1(a, b, cb) {
setImmediate(() => cb(a + b), 100);
}
function run2(a, b, cb) {
process.nextTick(() => cb(a + b));
}
function run3(a, b, cb) {
setTimeout(() => cb(a + b), 100);
}
run3(3, 4, rs => {
console.log(`Run3 : ${rs}`);
});
run1(1, 2, rs => {
console.log(`Run1 : ${rs}`);
});
run1(3, 4, rs => {
console.log(`Run1 : ${rs}`);
});
run2(10, 10, rs => {
console.log(`Run2 : ${rs}`);
});
run1(5, 6, rs => {
console.log(`Run1 : ${rs}`);
});
run3(3, 4, rs => {
console.log(`Run3 : ${rs}`);
});
각 콜백 함수들을 실행시키는 위치를 변경시켜보면 process.nextTick()이 항상 먼저 실행된다.
반응형
'Node.js' 카테고리의 다른 글
[NodeJS] nodemailer로 이메일 보내기 (0) | 2023.04.19 |
---|---|
[NodeJS] 빌더 패턴(Builder Pattern) (0) | 2022.11.01 |
[NodeJS] 이벤트 디멀티플렉싱과 리액터패턴 (0) | 2022.08.15 |
[NodeJS] Error : Cannot overwrite users model once compiled (0) | 2022.06.24 |
[NodeJS] express+mysql2+transaction 데이터 처리 (0) | 2022.03.15 |