본문 바로가기

PROGRAMMING/SPRING

[개념] Thread Pool & Multi Thread

Process(프로세스)

하나의 실행되고 있는 프로그램 자체를 의미

 

Thread(스레드)

프로세스를 안에 더 작은 작업 단위로 프로세스는 1개 이상의 스레드로 구성된다.

스레드는 생성될 때 운영체제가 메모리 확보 및 관여하는 부분이 많아 생성하고 관리하는 데에 CPU가 많이 소요된다.

 


 

여러 유저의 Request가 있을 때 취할 수 있는 조치

 

1. 요청이 올 때마다 스레드를 생성한다.

단점 : 위 쓰레드 설명에서 말했듯이 요청이 들어올 때마다 생성하면 응답속도가 낮아진다.

또한 여러 스레드가 돌아가면서 작업을 수행하는데 이때 콘텍스트 스위칭 비용이 발생한다.

 

2.  스레드를 미리 생성 해 놓는 스레드 풀

요청이 들어오면 스레드를 할당 -> 작업 완료 후 스레드를 반납하는 방식

장점 : 예를 들어 스레드 풀 이상의 작업 요청이 들어오면, 나머지 요청은 대기 혹은 거절로 처리된다.(설정에 따라 다름)

 

고로 보통 2번 스레드 풀을 설정해서 멀티스레드를 처리한다.

 

Thread Pool(스레드 풀)

풀을 너무 낮게 설정하면 CPU 리소스가 넉넉함에도 불구하고 요청 대비 처리가 너무 느려지고 장애가 발생한다. 

풀을 너무 높게 설정하면 CPU, 메모리 리소스 임계점 초과로 서버 다운이 될 수 있다.

 

장애가 발생한다면?  클라우드 환경에선 인스턴트 선 확장 후 튜닝/ 클라우드가 아니라면 튜닝

 

그렇다면 스레드 풀의 적당한 숫자는?

로직의 복잡도와 CPU 메모리 상황에 따라 다르다.

결국 성능 테스트를 하며  아파치 ab, 제이미터, nGrinder(네이버) 툴을 활용해 정할 수 있다.

 

위에서 말한 부분은 WAS에서 대부분 처리해주기 때문에 편하게 소스코드를 개발할 수 있다.

개발자는 싱글톤 객체와 싱글톤 객체의 공유 변수 등만 신경 써서 개발하면 된다.