728x90
1. Task (Process)
- Computer에서 연속적으로 실행되고 있는 Program
- OS로부터 Memory를 할당받아 실행 중인 것
- Scheduling의 대상이 되는 Process와 거의 같은 의미로 쓰임
- 여러 개의 Processor를 사용하는 것을 Multi Processing,
같은 시간에 여러 개의 Program을 띄우는 시분할 방식을 Multi Tasking이라 한다
2. Thread
- 한 Process 내에서 실행되는 흐름의 단위
- Process 내에서 실제로 작업을 수행하는 주체로, 모든 Process 내에는 1개 이상의 Thread가 있음
- 응용 프로그램이 실행될 경우 기본적으로 하나의 Thread가 발생 : Main Thread
- 보통 한 Process는 하나의 Thread를 가지나, 환경에 따라 2개 이상의 Thread를 동시에 실행할 수 있다
- 이를 Multi Thread라 한다
- 위처럼 각 Thread는 각자의 Stack과 Register를 갖는다
- Thread에 속한 Code, Data와 파일은 공유한다
3. Multitasking vs Multithreading
3.1. Multi Process
- CPU가 동시에 다수의 Process를 실행
- 각 Process는 독립적으로 실행되며 각각 별개의 Memory와 Resource를 차지
- CPU가 각 Process 간을 빠르게 자주 이동하며 Single Core가 마치 병렬 동작을 하는 것처럼 보이게 함
Ex) 웹 브라우저, 메모장, 음악 재생 프로그램을 동시에 키는 행동
3.2. Multi Thread
- 한 Process에서 다수의 Thread를 실행
- 같은 Process 내에 있으므로 Memory와 Resource를 공유해 사용할 수 있음
- 한 Process 내의 Thread들은 서로 통신 및 Data 교환을 쉽게 할 수 있음
- 이로 인해 Process 간의 전환 속도보다 Thread 간의 전환 속도가 빠름
- Operating System의 Scheduler가 각 Thread를 관리
3.2.1. Scheduler
- 어떤 Thread가 CPU에 접근할지 여부를 결정
- 즉 Thread의 시작 및 중지, 다른 Thread로의 전환 등을 관리
- 사용자에게의 반응성을 유지하는 동시에 CPU 사용의 효율성을 극대화하고 대기 시간을 최소화하기 위해 사용
- 각 Thread는 동작 / 준비 / 대기중 / 제거됨 등의 state를 가짐
- Scheduler는 여러 조건에 따라 Thread의 state를 변환시킴
- CPU가 여러 개일 경우 각각의 CPU가 Thread 하나씩을 담당하게 할 수 있음
- 이를 통해 여러 Thread가 동시에 수행되게 하여 작업 속도를 높일 수 있음
- 단 Multi Thread는 어떤 Thread가 먼저 실행될지 순서를 알 수 없다는 단점이 있음
- Signle Core 환경의 경우, 여러 개의 Thread들을 번갈아가며 실행시킴
- 이러한 성질을 동시성(Concurrenccy) 이라 함
- Multi Core 환경의 경우, 각 Core들이 한 개 이상의 Thread를 포함하여 각 Core들이 동시에 실행된다
- 이러한 성질을 병렬성(Parallelism) 이라 함
- 이러한 병렬성은 Data Parallelism과 Task Parallelism으로 구분됨
- Data Parallelism : 전체 Data를 쪼개 Sub Data들로 만든 후 그 Sub Data를 병렬 처리하여 작업을 수행하는 것
- Multi Core의 수 만큼 쪼개어 각각의 Data들을 분리된 Thread에서 병렬 처리 함
- Task Parallelism : 서로 다른 작업을 각각의 Thread에서 병렬 처리하는 것
Ex) 아래와 같은 웹 페이지 내의 여러 동작을 별도 Thread를 통해 처리
웹 페이지 랜더링 / 자료 다운로드 / 사용자 입력 처리
3.3. 공통점
- 여러 흐름이 동시에 진행됨
3.4. 차이점
A. Scope
- Multi Process : 다수의 Process들
- Multi Thread : 한 Process 내의 다수의 Thread 들
B. Resource
- Multi Process : 각 Process마다 별개의 Resource 사용
- Multi Thread : 같은 Memory 공간 사용
C. Overhead
- Multi Process : 각 Process마다의 Resource가 존재하므로 Thread에 비해 Process 생성 및 관리에 더 큰 부하 소요
- Multi Thread : 한 Process 내의 Thread들은 모두 같은 Resource를 보유하므로 비교적 적은 부하 소요
D. 사용 환경
- Multi Process : 다수의 Program들을 동시에 동작시키는데 적합
- Multi Thread : 성능 최적화를 위해 한 Program 내에서의 여러 동작들을 처리하는데 적합
4. Thread Pool
- Pool : 필요할 때 마다 할당 / 해제하는 대신 작업을 마치고 다음 작업을 준비한 상태로 초기화된 Object의 집합
- 즉 Thread가 할당된 Task의 처리를 마친 후 바로 소멸하는 것이 아닌
Thread Pool에 잠시 저장됐다 다음 Task의 처리 필요 시 꺼내서 사용하는 일종의 Thread 재활용 형식 - 또한 Thread를 Task 처리 시 마다 생성 및 해제시키지 않고 이미 생성된 Thread를 재사용하므로
Thread의 생성 및 해제에 드는 비용을 효율적으로 절감할 수 있음 - 작업에 사용되는 Thread를 제한된 개수만큼 정해놓고 작업 Queue에 들어오는 Task들을 하나씩 Thread가 맡아 처리
- CPU, Memory 등의 자원에는 한계가 있으므로 이를 관리하기 위해 사용
- 이를 통해 System의 성능을 향상시키고 여러 Task들의 잦은 생성 및 제거로 인한 실행 시의 Latency를 방지함
- Thread를 제한해서 하나씩 처리하므로 작업처리 요청이 폭증되어도 Thread의 전체 개수가 늘어나지 않아 System 성능이 급격히 저하됨을 방지
- 단 Thread 갯수를 과도하게 설정할 경우 Memory가 낭비될 수 있음
참고 자료 :
https://en.wikipedia.org/wiki/Thread_pool
https://hochoon-dev.tistory.com/entry/Thread-Pool%EC%9D%B4%EB%9E%80
https://velog.io/@dodozee/OSJava-%EC%8A%A4%EB%A0%88%EB%93%9C-%ED%92%80%EC%9D%B4%EB%9E%80Thread-pool
https://www.tcpschool.com/java/java_thread_concept
'Study_Engineering' 카테고리의 다른 글
Nelder-Mead Algorithm 이란 (0) | 2024.05.03 |
---|---|
Unscented Kalman Filter란 (0) | 2024.02.13 |
Extended Kalman Filter란 (0) | 2024.01.16 |
Kalman Filter란 (0) | 2024.01.16 |
표준편차, 분산, 공분산 (0) | 2024.01.16 |