본문 바로가기
java/기타

Thread pool vs Reactive

by 권성호 2021. 12. 1.

1. Thread pool 구조

Thread pool 구조

 

  • 미리 스레드 풀을 만들어 두고 사용자의 요청이 오면 스레드 풀에서 스레드를 할당한다.
    • 스레드는 자원이다.(스레드가 많으면 문맥 교환이 많이 발생하고 스케쥴링이 더 필요하고 메모리도 더 필요하다.)
    • 이러한 스레드를 미리 일정수준 만들어 두는 것은 그만큼의 자원을 소모하고 있음을 의미한다.
  • 스레드 풀에 존재하는 스레드의 수만큼 동시 처리가 가능하다.
  • 각각의 스레드는 기본적으로 동기적으로 처리된다.
    • IO가 발생하면 blocking 된다.

 

 

2. Reactive 구조

multiplexing을 통해 하나의 스레드로 다수의 사용자 요청을 처리
io 작업은 비동기 처리

  • 하나의 스레드가 multiplexing을 통해 다수의 사용자 요청을 처리한다.
    • 스레드 풀이 없기 때문에 그만큼 자원 소모가 적다.
  • 각각의 요청은 cpu 작업은 동기적으로 처리되고 io작업은 비동기 처리된다.
    • cpu 작업이 많이 필요한 경우 blocking이 될 가능성이 있다.
    • 반면, io작업이 많이 필요한 경우 높은 효율을 발휘한다.
    • 오로지 하나의 스레드 만으로 multiplexing이 힘들 경우 process를 늘리는 등의 기법을 사용해 보안하는 기능이 존재한다.
  •  io 처리 중에서도 일부 처리는 blocking 처리된다.
    • 이러한 blocking 처리를 위해 내부적으로 스레드 풀을 사용한다.

 

3.  생각

특수한 경우가 아니라면, cpu작업이 많이 필요하지 않은 요청이 대부분이다.

따라서 개인적으로는 Reactive 구조는 기존 Thread pool 구조의 한계를 극복하기 위해 나온 대안처럼 보인다.

 

물론, 기존에 오랜 기간 축적된 기술적 노하우는 Thread pool 구조에 더 많이 들어가 있는 것 같다.

 

4.  참고

https://godekdls.github.io/Reactive%20 Spring/springwebflux/#11-overview

 

Spring WebFlux (1)

스프링5 웹 리액티브 스택 웹플럭스 한글 번역 1편 (리액티브, 웹플럭스 소개, DispatcherHandler, 컨트롤러)

godekdls.github.io

https://yonghyunlee.gitlab.io/node/nodejs-structure/

 

nodejs의 동작 원리 - 김땡땡's blog

소개 node.js는 자바스크립트를 활용하여 고성능의 비동기 IO를 지원하는 네트워크 어플리케이션 개발 플랫폼이다. 구글의 V8이라는 자바스크립트 엔진으로 만들어져있고 single thread를 기반으로

yonghyunlee.gitlab.io

https://sjh836.tistory.com/149

 

nodejs의 내부 동작 원리 (libuv, 이벤트루프, 워커쓰레드, 비동기)

참조문서 https://github.com/nodejs/node https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/ https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node..

sjh836.tistory.com

 

댓글