Thread Pool비동기 작업을 효율적으로 처리하기 위한 중요한 개념입니다. Node.js는 싱글 스레드로 동작하는 이벤트 기반 환경이지만, I/O 작업이나 CPU 집중 작업을 효율적으로 처리하기 위해 백그라운드에서 여러 스레드를 사용하는 방식을 채택하고 있습니다. 이 스레드 풀(Thread Pool)은 libuv 라이브러리에 의해 관리됩니다.

Node.js와 싱글 스레드

Node.js는 자바스크립트의 싱글 스레드 모델을 따르며, 메인 이벤트 루프에서 자바스크립트 코드를 처리합니다. 하지만, 파일 시스템, 네트워크, 암호화 작업 등과 같은 I/O 작업을 비동기적으로 처리할 때, 스레드를 사용하지 않고도 효율적으로 실행됩니다. 이러한 비동기 작업 중 일부는 스레드 풀을 통해 병렬로 처리됩니다.

Thread Pool의 역할

Thread Pool은 Node.js에서 특정 작업을 비동기적으로 처리할 수 있도록 돕는 멀티 스레드 환경입니다. 주로 I/O 바운드 작업이나 CPU 집약적인 작업을 처리할 때 사용됩니다. 기본적으로 Node.js는 4개의 스레드로 구성된 풀을 사용하며, 이를 통해 자원 효율성을 높이고 동시 처리를 가능하게 합니다.

Node.js의 Thread Pool이 사용되는 주요 작업은 다음과 같습니다:

  1. 파일 시스템 작업 (File I/O):
  2. DNS 조회:
  3. 암호화 및 압축 작업:
  4. 사용자 정의 비동기 작업:

Thread Pool 동작 원리

thread_pool.jpg

  1. top-level 코드 실행 : 콜백 함수 안에 있지 않은 모든 코드인 top-level 코드들이 실행됩니다.
  2. 이벤트 등록 : 서버 어플리케이션이 필요로 하는 모든 모듈들이 require되고 모든 콜백 이벤트가 등록됩니다.
  3. 요청 수신: 이벤트 루프가 비동기 작업(예: 파일 읽기)을 요청받으면, 즉시 해당 작업을 스레드 풀로 넘깁니다.
  4. 작업 할당: Thread Pool은 요청된 작업을 가능한 스레드 중 하나에 할당합니다. 기본적으로 Node.js는 4개의 스레드를 가집니다.