멀티 쓰레드

고라니·2021년 11월 12일
0

갓영한님 스프링 MVC 강의를 듣고 정리한 내용들입니다.

일단 멀티쓰레드를 이해하기 전에 쓰레드 개념을 잡고 가야함.
웹 브라우저에서 요청하면 서블릿 컨테이너의 서블릿 객체가 호출된다고 했다. 그러면 이 서블릿 객체를 누가 호출해주는지부터 알아야 하는데, 그것은 바로 쓰레드 라는 녀석이다.

쓰레드

• 애플리케이션 코드를 하나하나 순차적으로 실행핬는 것을 쓰레드 라고 한다.
• 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행
• 쓰레드가 없다면 자바 애플리케이션 실행이 불가능
• 쓰레드는 한번에 하나의 코드 라인만 수행
• 동시 처리가 필요하면 쓰레드를 추가로 생성

만약 멀티 쓰레드가 아니라 쓰레드를 하나만 사용한다면?

• (ex) 요청 1에 대해 쓰레드가 할당되어 동작하고, 처리를 마치면 휴식
• 처리 도중 모종의 이유로 처리가 지연된다고 가정. 그 때 요청 2가 들어오면 단일 쓰레드가 요청1의 처리를 끝낼 때까지 대기.
• 이런 식으로 계속 쌓이면 ? 망한다.

그러면 요청 마다 쓰레드를 생성하면?

• 장점 - 동시 요청을 처리 할 수 있고, 하나의 쓰레드가 지연되어도 나머지 쓰레드는 정상적으로 동작함.
• 단점1 - 쓰레드는 생성 비용이 매우 비쌈. ( 요청이 올 때마다 쓰레드를 생성하면 응답속도 느려짐)
• 단점2 - context switching 비용이 발생한다.
• 단점3 - 쓰레드 생성에 제한이 없다 (요청이 너무 많이 오면 CPU, Memory 임계정을 넘어서 서버가 죽을 수 있다.)

쓰레드 풀(Thread Pool) 이 앞선 문제들을 해결해 줌!

쓰레드 풀
• 필요한 쓰레드를 쓰레드 풀에 보관하고 관리한다.
• 쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리한다. 톰캣은 최대 200개가 기본 설정이다. (변경 가능)

쓰레드 풀의 동작
• 쓰레드가 필요하면, 이미 생성되어 있는 쓰레드를 쓰레드 풀에서 꺼내서 사용한다. 사용을 마치면 쓰레드를 종료하는것이 아니라 쓰레드 풀에 다시 반납한다.
• 최대 쓰레드가 모두 사용중이어서 쓰레드 풀에 쓰레드가 없으면 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.

쓰레드 풀의 장점
• 쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하고 종료하는 비용(CPU)이 절약되고, 응답 시간이 빠르다.
• 생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.

쓰레드 풀 실무 팁

• WAS의 주요 튜닝 포인트는 이 최대 쓰레드 수 이다.
• 너무 낮게 설정하면 서버 리소스는 여유롭겠지만 client에서 금방 응답지연이 발생한다.
• 너무 높게 설정하면 동시 요청 증가시 CPU, 메모리 리소스 임계점 초과로 서버가 다운될 수 있다.
• 클라우드 환경이면 일단 서버부터 늘리고, 튜닝하자!
• 적정 숫자는 애플리케이션 로직의 복잡도, cpu, 메모리, io리소스 상황에 따라 모두 다르기 때문에 실제 서비스와 유사하게 성능 테스트를 시도해보며 찾을 것.

그래서 결론이 뭔데? - WAS은 멀티 쓰레드를 지원해준다!

• 멀티 쓰레드에 대한 부분은 WAS가 처리하기 때문에 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 됨. (멀티 쓰레드 고려하면서 짜는거 으렵다)
• 개발자는 마치 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발할 수 있다.
• 멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)는 꼭 주의해서 사용할 것.

개념 참고 (출처 TCP School)

프로세스(process)란?
프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있다.
즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다.
이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.

스레드(thread)란?
스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행함.
두 개 이상의 스레드를 가지는 프로세스는 멀티스레드 프로세스(multi-threaded process)라고 함.

profile
공부를 열심히 하는 학부생

0개의 댓글