스레드풀이란??
1. 작업처리에 사용되는 스레드를 제한된 개수만큼 정한다.
2. 작업큐 (Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다.
그렇게 하면 작업처리 요청이 폭증되어도 스레드의 전체개수가 늘어나지 않으므로 (제한해서 하나씩 처리하기 때문) 시스템 성능이 급격히 저하되지 않는다.
3. 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리한다.
사용이유
- 병렬 작업 처리가 많아지면 스레드생성으로 메모리 사용량이 늘어져 성능저하로 이어진다. 스레드의 폭증을 막으려면 스레드 풀을 사용해야 한다.
따라서 작업 처리 요청이 폭증해도 작업 큐라는 곳에 작업이 대기하다가 여유가 있는 스레드가 그것을 처리하므로 스레드의 전체 개수는 일정하며 애플리케이션의 성능도 저하되지 않는다.
요약
스레드풀안에 작업큐와 스레드들이 있다.
작업요청이 들어오면 작업큐안에 쌓이게 되고 쓰레드들이 작업큐안에있는 작업들을 빼서 처리한다.
정해진 양만큼의 스레드사용, 사용된 스레드를 없애지 않고 재사용가능
여러개의 작업을 동시에 처리하면서도 안정적으로 처리하고싶을때 사용
DB 커넥션 풀
사용자의 요청에 따라 Connection이 생성된다면 수 많은 사용자가 요청을 했을 때 서버에 과부하가 걸리게 된다.
그래서 요청이 들어올때마다 커넥션을 생성하지 않고 풀에서 만들어 놓고 관리한다.
데이터베이스와 연결된 커넥션을 미리 만들어 놓고 관리하는 것이다. 즉, 필요할 때마다 커넥션 풀의 커넥션을 사용하고 다시 반환한다.
이처럼 미리 만들어 놓은 커넥션을 이용하면 Connection에 필요한 비용을 줄일 수 있다.
- 여러 개의 DB Connection을 하나의 Pool에 모아놓고 관리
- DB 커넥션 객체를 여러 개 생성한 뒤 Pool에 담아놓고 필요할 때 불러와서 사용
- 만약, 빌려줄 수 있는 Connection이 없다면 Connection 객체가 반환할 때 까지 클라이언트는 대기 상태로 전환
- 사용이 끝난 커넥션 객체는 다른 작업에서 다시 사용할 수 있도록 Pool에 반환