단순 Thread 클래스를 사용하게 되면?
자바8 기준 사용자 레벨 스레드를 사용하지 않음
JVM을 통해 OS의 시스템콜을 호출하여 커널 스레드를 1:1로 할당 받음
⇒ 스레드 생성 비용이 너무 크다!!!!!!!!!!!!!!!!!!!!!
(스레드 맵핑과 관련한 글은 아래 글에서 확인하실 수 있습니다.)
2023.09.10 - [컴퓨터공학/운영체제] - [운영체제?] 스레드의 종류(하드웨어스레드, 커널레벨스레드, 유저레벨스레드)
헉! 그럼 자바에서 스레드를 사용하면 비효율적이네요!
하지만 당근빠따루 스레드풀을 사용할 수 있음
concurrent 패키지의 ThreadPoolExecutor 클래스로 사용
⚠️ Executors.newFixedThreadPool(100)로 생성 시
작업 큐 사이즈가 Integer.MAX_VALUE로 설정됨
즉, 잠재적 위험 요인이 있다를 인식하고 사용해야 함
Python 또한 사이즈 제한 없는 큐를 사용
Tomcat의 스레드
- Java와 매우 유사한 자체 스레드풀 구현체를 가지고 있다!
org.apache.tomcat.util.threads.ThreadPoolExecutor
❗자바와 추가적으로 다른 점
Max Connections
- 톰캣이 최대로 처리할 수 있는 connection의 개수
- web 요청이 들어오면 톰캣의 Connector가 Connection을 생성하면서 Thread Pool의 Thread에 연결
Accept Count
- max connection 이상의 요청이 들어왔을 때 사용하는 대기열 queue의 사이즈
- max connection 과 accept count 이상의 요청이 들어오면 거절됨
우리가 스레드풀 설정을 해야 하는 이유
- 스레드풀은 응답시간과 TPS에 영향을 주게됨
- 잘 조절된 스레드풀은 시스템의 성능을 올리고 안정적인 운용 가능하게 함
- 부적절한 스레드풀 설정은 병목 현상, 오버헤드, 메모리 문제 유발
- 개념과 설정을 알고 있어야 더 좋은 server application 개발할 수 있게 됨ㅎㅎ
'Develop > Java' 카테고리의 다른 글
[Java] Lambda, Functional Interface 그리고 Stream API (0) | 2023.09.08 |
---|---|
Java JVM 아키텍쳐 (1) (2) | 2023.07.16 |
[Java] String to Json 파싱하기 | Jackson ObjectMapper (0) | 2023.04.02 |
TDD 테스트 주도 개발 (0) | 2023.02.19 |
코드 테스트에 관한 약어(FIRST, Right-BICEP, CORRECT) (0) | 2023.02.16 |