• setTimeout 은 0초를 설정해도 1ms 후 실행되도록 설계되어 있다.
setTimeout(() => {
    console.log("timer");
}, 0);

setImmediate(() => {
    console.log("check");
});
const fs = require("fs");
fs.readFile("test.txt", (result) => {
    setTimeout(() => {
        // 1. 타이머 등록
        console.log("timer");
    });

    setImmediate(() => {
        //  2. 체크 등록
        console.log("check"); // 3. 폴에서는 setImmediate 실행이 우선
    });
});
check
timer
 
 
 
 
 
// tick이 모두 작업된 후 다음 절차로 넘어간다.
const setTick = () => {
    process.nextTick(setTick); 
    // setTick이라는 함수 안에서 setTick 호출
}; // nextTick(setTick)에 들어가는 setTick은 콜백함수 => 무한 루프

setTick();

setTimeout(() => {
    // 순서상 타이머가 가장 먼저 처리가 되어 타이머쪽에 setTimetout 설정
    console.log("timer"); 
    // setTick이 setTimeout보다 먼저 실행 되기때문에 timer는 실행될 수 없다.
}); // 실행하면 nextTick으로 계속 무한루프가 돌기 때문에 콘솔에 아무것도 출력되지 않는다.

 

 

 

 

1. 타이머 큐에 등록

2. 검사 큐에 등록

3. 틱 큐에 등록

 

1. 틱 큐 비우기

1-1. 틱 안에 타이머2를 처리하고자 타이머1도 처리

1-2. 1번 틱 안에 검사2를 처리하고자 검사1도 처리된다.

2. 2번 틱 처리

 

setTimeout(() => {
    console.log("timer1");
}, 0);
setImmediate(() => {
    console.log("check1");
});
process.nextTick(() => {                             // 1번째 틱
    setTimeout(() => console.log("timer2"), 0);
    setImmediate(() => {
        process.nextTick(() => console.log("tick2"));    // 2번째 틱
        console.log("check2");
    });
    console.log("tick1");                            // 콜 스택에서 처리하므로 1번째 틱에 들어왔는지 출력
});

 

tick1
timer1
timer2
check1
check2
tick2
 

 

 

( 이벤트 루프 절차 )

 

tick2 가 바로 처리 되지 않은 이유 :

  • tick1이 실행 되어야 tick2가 실행된다.
  • tick1 안에 setTimeout과 setImeediate가 들어가있다.

timer1, timer2가 tick1다음으로 나온 이유 :

  • 등록이 timer1, timer2가 되고 timer큐 작업이 끝나야 다음 절차로 넘어간다.
  • 풀 에서 통신이나 DB 등 처리할 것이 있는지 검사한다.
  • check1,2는 풀에서 작업 되는것이 아니기 때문에 순서상 타이머가 먼저 처리가 된다.
  • (정리) 풀에서 통신이나 DB를 처리할 것이 있는지 검사후 없으므로 check로 오고 등록된 check실행
  • tick1 처리 끝

마지막 tick2 실행 후 종료

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

function  (0) 2024.01.29
oper , switch  (0) 2024.01.29
scope ( let , var, const )  (0) 2024.01.29
javascript 메소드 정리  (0) 2024.01.28
자바스크립트  (0) 2024.01.28