[Advanced Node JS] 1 - 이벤트 루프

2750 단어 javascript
Event Loop는 JavaScript(Browser) & Node JS에서 가장 중요한 개념 중 하나입니다.

이벤트 루프는 또한 C/C++ 또는 Java와 같은 다른 클래식 프로그래밍 언어 간의 가장 큰 차이점입니다.

노드 JS 대 브라우저



브라우저와 Node JS 모두 자체 이벤트 루프가 있습니다. Node JS 이벤트 루프는 약간 복잡하고 더 많은 단계가 있지만 둘 다 동일한 개념을 공유합니다. 브라우저의 이벤트 루프를 소개하겠습니다.

동기 호출 대 비동기 호출



동기식 호출은 다른 프로그래밍 언어와 마찬가지로 스택으로 이동합니다. 스택이 비워질 때까지 실행됩니다.

그러나 비동기 호출은 Queue(이벤트 루프)로 이동합니다. 다음은 이벤트 루프가 간단한 코드로 표시되는 방식입니다.

while (queue.waitForMessage()) {
  queue.processNextMessage();
}


메시지 폴링은 스택이 비어 있을 때 발생합니다. 따라서 모든 동기 호출이 먼저 처리됩니다. 동기 함수가 먼저 스택에 푸시되기 때문에 대기 중인 모든 함수(메시지)가 처리될 때까지 기다려야 합니다.


// Synchronous Call
console.log("1: Pushed to stack");

// Asynchronous Call
setTimeout(()=>{
    console.log("1: Pushed to queue");
}, 1000);

// Synchronous Call
console.log("2: Pushed to stack");

// > Output: 
// 1: Pushed to stack
// 2: Pushed to stack
// 1: Pushed to queue




함수 처리는 스택이 다시 비워질 때까지 계속됩니다. 그런 다음 이벤트 루프는 대기열에 있는 다음 메시지를 처리합니다(있는 경우). 대기열의 각 메시지에는 기능이 포함되어 있습니다. 따라서 큐에서 새 메시지를 폴링하면 스택 맨 위에 함수가 푸시됩니다.

함수의 작업량이 많을 때 큐(이벤트 루프)를 사용하고 싶습니다. 일반적으로 웹 브라우저에서 setTimeout , eventListener 와 같은 웹 API를 호출하면 해당 함수 호출이 대기됩니다.

좋은 웹페이지 즐겨찾기