[WEB] 멀티스레드란?

Cherry·2022년 3월 21일
0
post-thumbnail

스레드란?

애플리케이션 하나하나 순차적으로 실행하는것이다

ex) 자바 메인 메서드를 처음 실행하면 main이라는 이름의 스레드가 실행된다

  • 동시 처리가 필요하면 스레드를 추가로 생성한다
  • 스레드가 없다면 애플리케이션 실행이 안된다.
  • 스레드는 한번에 하나의 코드만 수행할 수있다

멀티스레드란?

스레드

  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 - 최소화하여 수행 능력을 향상 시킨다
  • 하나의 프로그램에서 동시에 여러 개의 일을 수행할 수 있도록 해준다 (사실 분산처리를 통해 동시에 실행되는 것 처럼 보이는 것)

요청마다 스레드 생성

장점

  • 동시요청을 처리할수 있으며 스레드가 하나가 지연되도 나머지 스레드는 정상작동한다
  • CPU와 메모리가 허용할 때까지 가능하다

단점

  • 스레드 생성 비용이 비싸다
  • 응답속도가 느려지며 컨택스 스위칭 비용이 발생한다
  • 생성에 제한이 없어 CPU와 메모리의 한계점이 넘으면 서버가 죽을 수 있다

스레드풀

:작업처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 작업큐 (Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리하는 방식이다

특징

  • 필요한 스레드를 스레드 풀에 보관하고 관리한다.
  • 요청마다 스레드 생성의 단점을 보완한다
  • 생성가능한 스레드의 최대치를 관리한다 (톰캣은 200개가 최대, 변경 가능)

작동원리

  1. 스레드가 필요하면 스레드 풀에서 꺼내서 사용한다
  2. 사용을 종료하면 다시 스레드풀에 쓰레드를 반납한다
  3. 모든 스레드가 사용중이어서 스레풀에 스레드가 없으면 기다리는 요청을 거절하거나 특정숫자만큼 대기하도록 설정한다.

장점

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

스레드풀의 적정 숫자

→ 애플리케이션 로직의 복잡도, CPU, 메모리, IO 리소스 상황에 따라 달라진다

→ 가장 정확한 방법은 성능 테스트를 하는것이다

  • 최대한 실제 서비스와 유사하게 성능 테스트 시도한다
  • 툴: 아파치 ab, 제이미터, nGrinder

WAS의 멀티 스레드

  • 멀티스레드에 대한 부분은 WAS가 처리한다
  • 개발자는 멀티 스레드에 신경 쓰지 않고 싱글 스레드 프로그래밍하듯이 개발하면 된다
  • 멀티 스레드 환경이므로 싱글톤 객체는 주의해서 사용해야 한다

0개의 댓글