본문 바로가기

Study_Engineering

Thread란

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(좌)와 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

About 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

 

Thread pool - Wikipedia

From Wikipedia, the free encyclopedia Software design pattern A sample thread pool (green boxes) with waiting tasks (blue) and completed tasks (yellow) In computer programming, a thread pool is a software design pattern for achieving concurrency of executi

en.wikipedia.org

 

https://hochoon-dev.tistory.com/entry/Thread-Pool%EC%9D%B4%EB%9E%80

 

Thread Pool이란?

Thread Pool 회사 제품의 코드를 보면서 긴가민가했던 개념들을 정리해볼라고 적는 포스팅 Process VS Thread 맨날 프로세스가 더 큰거, 쓰레드는 그 프로세스 안에서 돌아가는 단위로서 프로세스의 자

hochoon-dev.tistory.com

 

https://velog.io/@dodozee/OSJava-%EC%8A%A4%EB%A0%88%EB%93%9C-%ED%92%80%EC%9D%B4%EB%9E%80Thread-pool

 

[OS,Java] 스레드 풀이란?(Thread pool)

스레드의 생성과 소멸이 자주되면 시스템에 많은 부담을 준다. 스레드가 하나의 일에 한번만 수행하고 소멸된다면 매우 비효율적인 일이 아닐수가 없다!.오늘은 스레드를 어떻게 효율적으로 사

velog.io

 

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