Node.js worker_threads로 CPU 인텐시브 작업 성능 향상
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Node.js에서 worker_threads로 성능 향상 및 라우트 블로킹 방지

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

Node.js 애플리케이션 개발자, CPU 인텐시브 작업 처리에 관심 있는 개발자

난이도: 중급 (비동기 프로그래밍 및 worker_threads 이해 필요)

핵심 요약

  • worker_threads 모듈 사용으로 메인 스레드 블로킹 방지
  • CPU 인텐시브 작업을 병렬 처리하여 성능 향상 (7.63초 → 1.56초)
  • Promise.all과 여러 워커 분산 처리로 병렬성 극대화

섹션별 세부 요약

1. 문제 상황: 라우트 블로킹

  • /compute 라우트에서 무거운 계산 작업 수행 시, 메인 스레드가 블로킹되어 / 라우트에 접근 불가
  • calculate(100_000_000) 함수는 배열 생성 및 홀수/짝수 합산으로 CPU 리소스 소모
  • worker_threads 사용 전, 동시 요청 시 응답 지연 발생

2. worker_threads 모듈 소개

  • worker_threads는 별도 스레드에서 JavaScript 실행 가능
  • 메인 스레드는 라우트 처리, 워커 스레드는 계산 수행
  • parentPort.postMessage로 워커와 메인 스레드 간 통신 가능

3. 코드 수정 및 워커 생성

  • worker.js 파일 생성: workerData로 입력값 전달, parentPort.postMessage로 결과 전송
  • main.js에서 Worker 생성, workerData로 파라미터 전달
  • calculate 함수를 Promise로 리팩토링하여 비동기 처리

4. 병렬 처리를 통한 성능 개선

  • Promise.all로 작업 분할: 100_000_000 → 4개의 25_000_000 작업
  • 4개 워커 병렬 처리로 실행 시간 7.63초 → 1.56초 감소
  • try/catch로 에러 처리 강화

결론

  • worker_threads는 CPU 인텐시브 작업 시 메인 스레드 블로킹 방지 및 성능 향상에 효과적
  • 작업 분할과 병렬 처리로 최대 5배 성능 향상 가능
  • Promise.alltry/catch 사용을 통해 안정성 확보 및 실무 적용 권장