본문으로 바로가기

Spring MVC의 Thread pool

 

Spring MVC Thread Pool

 

쓰레드 풀의 딜레마

- CPU, 메모리가 충분하지만 쓰레드가 모자라서 처리율 저하

- 그래서 쓰레드를 과도하게 늘리면 이번엔 메모리, CPU 부하로 성능 저하

- 컨텍스트 스위칭이라 하여 CPU간 전환 과정은 엄청난 부하가 필요

- 즉, 쓰레드를 무조건 늘린다고 문제를 해결할 수 있는 것은 아님

 

동기, 블로킹 vs 비동기, 논블로킹

전통적인 Spring MVC 는 동기, 블로킹 방식으로 동작이 됩니다.

하나의 작업이 Thread 에서 처리될때 IO 작업이 있다면 (다른 Rest Api 에서 데이터를 가지고 온다거나, DB 에서 데이터를 가지고 오는 경우) Thread 는 일을 하는게 아니라 노는 순간 즉, 비효율이 발생 됩니다.

 

동기/비동기 & 블로킹/논블로킹에 대한 지식을 알고 싶으시다면?

 

이와 다르게 Spring WebFlux 는 비동기, 논블로킹 형태로 구성이 되며 모든 함수간의 관계가 발행/구독 형태의 옵저버 패턴으로 연결이 됩니다. 하나의 작업이 Thread 에서 처리 될때 IO 작업이 있다면 IO 작업을 맡은 Thread 에게 완료되면 '호출' 해줘 라고 일을 위임하고 다른 일을 시작 합니다.

 

 

이러한 문제점을 개선하기 위해 나온것이 Webflux!

 

webflux : 적은 수의 스레드로 동시성을 처리

 

 

 

 

 

 

참조 링크 : www.youtube.com/watch?v=4x1QRyMIjGU

 

참조사이트 : jogeum.net/30