스레드 풀

지식저장공간·2023년 3월 2일
0

운영체제

목록 보기
13/15

스레드 풀

스레드 풀이 존재하지 않을 때

하나의 요청마다 하나의 스레드 생성되어 요청을 처리한다. 1:1 맵핑

요청마다 스레드를 생성하고 폐기하게 되면 스레드의 생성에 시간을 소비하기 때문에 요청 처리가 더 오래 걸린다.

처리 속도 < 요청 속도

스레드마다 메모리를 점유하기 때문에 메모리 여유 공간이 사라진다.

스레드 풀 형성

Queue에 request들이 들어오게 되면 스레드 풀에 형성되어 있는 스레드를 1:1 맵핑하여 요청을 처리하고, 사용한 스레드는 스레드 풀에 반납(release)하게 된다.

-> 스레드 생성시간을 감소 시킬 수 있으며, 스레드가 무제한으로 생성되는 것을 방지한다.

스레드 풀 사례

여러 작업을 동시에 처리해야할 때

스레드 풀 팁

1. 몇개의 스레드가 적절한가?

CPU bound 프로세스의 경우 CPU 코어보다 1~2개 많이

I/O bound 프로세스의 경우 CPU 코어보다 1.5~3배 성능테스트를 해보며 찾는다.

스레드 풀에서 실행될 task 개수에 제한이 없다면

스레드 풀에 존재하는 스레드들이 모든 요청을 다 처리중일 경우 더이상 처리할 수 있는 스레드가 존재하지 않기 때문에 스레드 풀의 요청을 저장하는 Queue의 크기를 확인하고 제한해야한다. Queue에 제한이 없는경우 request들이 무한히 쌓인다.

자바의 Executors 클래스의 생성자에는 LinkedBlockingQueue를 사용하여 객체를 생성하는데 LinkedBlockingQueue 생성자에 Integer.MAX_VALUE를 Queue 사이즈로 사용한다. 따라서 Queue의 사이즈가 매우 크다.

이렇게 되면 스레드 풀에 존재하는 스레드가 요청이 들어오는 속도보다 처리속도가 느리게 되면 계속해서 스레드는 고갈되고 대기 큐에는 요청이 무한으로 쌓이게 된다.

파이썬 ThreadPoolExecutor

출처 : 쉬운코드 유튜브

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글