Node.js의 Event Loop Concept 이해하기 2편!
1. Single threaded, and blocking funciton
console.log("first task");
console.time();
for (let i = 0; i < 1000000; i++) {
const h3 = document.querySelector("h3");
h3.textContent = "Hey, everyone is waiting on me";
}
console.timeEnd();
console.log("next task");
: 앞서, 우리는 Event Loop을 살펴보며, Node.js의 특성에 대해 파악했습니다. Node.js의 경우 코드를 line by line으로 읽어내며, 앞선 line의 function이 상대적으로 시간이 오래걸리거나, 인자로 받을 Input을 기다리며, Blocking 현상이 발생합니다.위 코드는 영상에서 제공하는 간단한 예제입니다. I/O 작업을 진행하는 console.log는 first task를 출력, 그리고 마지막 line에서 next task를 출력합니다. 2개의 I/O작업 사이에 존재하는for loop은 1000000번을 돌며, loading 문구를 출력합니다. 간단한 I/O 작업 보다 상대적으로 오래걸리는 for loop은 일종의 blocking 역할로 보여집니다. 결과적으로, first task를 출력한후, next task를 출력하기위해선 이 for loop이 끝나길 기다려야겠죠!
2. Single Threaded, and callback function
console.log("first task");
setTimeout(() => {
console.log("second test");
}, 0);
console.log("next task");
:다른 예제를 살펴봅시다! Single threaded node js의 비동가화 예제입니다. 앞선 예제와 같이 I/O 작업을 수행하는 console.log가 보입니다. Single threaded synchronous node js의 경우 컴파일을 line by line, 즉 순서대로 실행합니다. 하지만, cb function을 만나면, call stack에서 빠져나와 개별적인 수행과정을 겪고, call stack 다음 순서의 function이 실행됩니다. 따라서, setTimeout()은 blocking function이 되지않고, 다음 line에서 준비하고 있는 기능들은 setTimeout()이 끝나기를 기다릴 필요가 없어집니다! 마지막으로 빠져나온 CB이 Event loop에 의해 다시 Call Stack에 push되어 최종적으로 코드 실행이 종료됩니다.
물론, 더 자세한 과정과 복잡한 코드 예제들을 통해 Node js의 비동기화를 설명하지만, 이번 단계에선 추후에 진행될 프로젝트 작업들을 위한 기본내용을 살펴본것으로 만족하겠습니다.
'웹 개발 > Node.js' 카테고리의 다른 글
[Node.js] #4 HTTP (0) | 2021.12.26 |
---|---|
[Node.js] #3 Promise 객체 사용과 Async 동작 (0) | 2021.12.12 |
[Node.js] #1 Event Loop이 무엇인가? (0) | 2021.11.06 |