[Node.JS] NodeJs의 이벤트 루프와 비동기 처리

박두팔이·2024년 3월 26일
0

Node.JS

목록 보기
13/20

Node.js의 이벤트 루프와 비동기 처리

Node.js는 고성능 비동기 I/O 처리를 가능하게 하는 이벤트 루프 기반의 단일 스레드 모델을 사용합니다. 이 글에서는 Node.js의 핵심 구성 요소인 이벤트 루프, 백그라운드 작업, 태스크 큐의 작동 방식과 이들이 어떻게 Node.js의 비동기 처리를 효율적으로 만드는지에 대해 자세히 알아보겠습니다.

  • 이벤트루프로 처리를 한다고 했는데 백그라운드에서 실행 할 수 있는건 백그라운드로 보내고, 그게 아니라면 node라는 런타임으로 하나의 쓰레드 위에서 작업한다.

단일 스레드 모델

Node.js는 기본적으로 단일 스레드 환경에서 실행됩니다. 즉, 모든 JavaScript 코드는 하나의 메인 스레드, 즉 이벤트 루프에서 순차적으로 처리됩니다. 이는 코드 실행을 간단하고 예측 가능하게 만들지만, CPU 집약적 작업은 이벤트 루프를 차단할 수 있으므로 주의가 필요합니다.

이벤트 루프

이벤트 루프는 Node.js의 핵심 구성 요소로, 비동기 작업을 관리하고 콜백 함수를 통해 그 결과를 처리합니다. 이벤트 루프는 시스템 I/O, 타이머, HTTP 요청과 같은 비동기 이벤트의 결과를 처리하는 역할을 합니다.

백그라운드 작업

비동기 I/O 작업은 Node.js의 메인 스레드가 아닌 백그라운드에서 실행됩니다. 이는 Node.js가 사용하는 libuv 라이브러리에 의해 가능하며, libuv는 I/O 작업을 효율적으로 처리하기 위한 스레드 풀을 제공합니다. 따라서 메인 스레드는 다른 작업을 계속 처리할 수 있습니다.

태스크 큐

비동기 작업이 완료되면, 해당 작업의 콜백 함수는 태스크 큐에 추가됩니다. 메인 스레드(이벤트 루프)가 처리할 코드가 없을 때, 이벤트 루프는 태스크 큐에서 작업을 가져와 실행합니다. 태스크 큐는 선입선출(FIFO) 원칙을 따릅니다.

결론

Node.js의 이벤트 루프, 백그라운드 작업 처리, 태스크 큐의 원리를 이해하는 것은 Node.js 애플리케이션의 성능을 최적화하고 효율적인 비동기 코드를 작성하는 데 필수적입니다. 이러한 메커니즘 덕분에 Node.js는 단일 스레드임에도 불구하고 매우 높은 성능의 비동기 I/O 처리를 제공합니다.

profile
기억을 위한 기록 :>

0개의 댓글