[우아한테크코스] 11월 2일 TIL
[Java] Thread pool
-
java의 특징
java는 oop로 상속, 캡슐화, 다형성, 추상화를 제공한다.
Garbage Collection을 이용해 자동 메모리 관리를 할 수 있도록 하고, JVM 위에서 동작하기 때문에 운영체제에 독립적으로 동작한다.
어플리케이션 실행 시 모든 클래스가 생성되지 않고 객체가 필요할 때 메모리에서 클래스를 불러오는 동적 로딩을 지원한다.
멀티쓰레드 프로그래밍을 지원한다. 멀티쓰레드란 여러 쓰레드를 동시에 실행시키는 것이다. 시스템 자원의 소모는 줄어들지만 자원 공유로 인한 충돌이 일어날 수 있다.
-
멀티스레드를 위해
싱글 코어에서 멀티스레드를 동작시키기 위해 동시성이 사용된다. 각 스레드들이 병렬적으로 실행되는 것이 아니라 번갈아가면서 조금씩 실행된다.
한 개 이상의 스레드를 포함하는 각 코어들이 동시에 동작되는 것이 병렬성이다. 예를 들어, 스트림에서는 데이터 병렬성을 사용하는 것이고, 웹 서버에서 요청이 들어왔을 때 서로 다른 스레드에서 요청을 실행하는 것은 작업 병렬성을 이용하는 것이다.
-
thread pool
작업 처리에 사용되는 스레드를 일정 수만큼 미리 만들어두고 큐에 들어오는 작업들을 하나씩 스레드가 맡아 처리하도록 하기 위해 존재하는 것
만약 스레드풀이 없다면 os는 요청에 따라 메모리를 확보하고 그 메모리에 스레드 할당하는 작업이 필요하고 이것은 프로그램의 성능 저하를 일으킨다.
java에서 ExecutorService 구현체를 통해 스레드풀을 생성하고 사용할 수 있다.
execute()는 작업 처리 결과를 반환하지 않고 예외가 발생하면 스레드가 종료된다.
submit()은 작업 처리 결과를 반환하고 예외 발생 시 스레드가 종료되지 않고 재사용한다.
tomcat은 멀티스레드 servlet container로 클라이언트의 요청이 각 스레드에서 실행되고 기본 값은 최소 2개의 스레드로 시작하고 최대 200개의 스레드를 생성할 수 있다.