본문 바로가기
필수 개발지식/CS

[CS] 쓰레드와 쓰레드 풀

by 코딩하는짱구 2023. 7. 5.
반응형

✅Summary

쓰레드

: 프로세스 내에서 실행되는 실행 단위

쓰레드 풀

: 쓰레드를 미리 생성해두어 작업처리에 사용되는 쓰레드를 제한된 개수만큼 정해놓고 작업 큐에 들어오는 작업들을 하나씩 쓰레드가 맡아 처리하는 기법 ex) 치킨집에서 직원이 필요할때마다 구인하는 것이 아니라 뽑아놓고 일을 분담

쓰레드 풀의 장/단점

장점: 쓰레드를 생성/수거하는데 비용이 들지 않으므로 시스템 자원을 줄일 수 있다. 

단점: 쓰레드를 너무 많이 생성해 두었다가 사용하지 않으면 메모리 낭비가 발생 ex) 직원이 많으면 월급만 나가니까

 

 

 

✅프로세스와 쓰레드의 차이

👉프로세스

: 상가 건물을 컴퓨터라고 한다면 치킨집은 프로세스

: ex) 상가안의 식당들은 배정된 자신의 공간과 돈이 있다. 즉 컴퓨터 안에 각 프로세스가 존재

: 자신만의 고유 공간과 자원을 할당받아서 사용 - 최소 하나의 쓰레드를 보유하고 있다 (code, heap, stack) 

: 프로세스마다 독립된 메모리 영역을 code/data/stack/heap의 형식으로 할당 받기 때문에 다른 프로세스의 변수나 자료에 접근할 수 없다. 

: 아래 그림에서 여러 프로세스가 동시에 실행되는 것이 아니라 빠르게 프로세스들을 번갈아가면서 실행하고 관리

 

프로세스의 주소공간

 

 

👉쓰레드

: 다른 쓰레드와 공간과 자원을 공유하면서 사용 - 프로세스 안에서 작업을 처리한다. 프로세스 자원중 stack만 따로 할당 받고 나머지 영역은 쓰레드끼리 서로 공유 

: 각각의 쓰레드는 별도의 stack을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있다. 

: ex) 치킨집에서 각자 일하는 공간이 있지만 같이 보는 업무 가이드(code)가 있고, 주문도 같이 받고(data), 손님이 오가는 홀 공간도 같이 쓴다(heap, 동적으로 할당된 데이터를 저장)

 

쓰레드의 주소공간

 

 

 

 

✅멀티프로세스와 멀티쓰레드

👉멀티프로세스

: 하나의 운영체제 안에서 여러 프로세스가 실행되는 것

👉멀티쓰레드

: 하나의 프로세스가 여러 작업을 여러 쓰레드를 사용해 동시에 처리하는 것

 

 

 

 

✅쓰레드풀? 장/단점?

 

 

👉쓰레드풀

: 컴퓨터 프로그램에서 실행의 동시성을 달성하기 위한 소프트웨어 디자인 패턴이다.

: 여러 쓰레드를 동시에 만들어 실행(병렬처리)할 수 있다

: 초기화 -> 작업수신 -> 작업수행 -> 작업처리 -> 작업완료 및 반환 -> 작업대기 -> 종료 의 동작과정

 

👉쓰레드풀을 사용하는 이유 

 

1️⃣프로그램 성능 저하 방지 

  • 매번 발생하는 작업을 병렬처리하기 위해 쓰레드를 생성/수거하는 데 따른 부담은 프로그램 전체적인 퍼포먼스를 저하시킨다. 
  • 쓰레드 또한 프로세스가 할당한 메모리를 사용한다
  • 즉 Java의 경우 쓰레드를 생성하면 JVM 메모리를 소비하게 되는 것, 쓰레드 자체도 레지스터와 스택을 가지고 context switching 이 일어나기 때문에 쓰레드 생성에 따른 메모리 할당을 무시할 수 없음 

2️⃣다수의 사용자 요청을 처리

  • 대규모 프로젝트에서 특히 중요, 다수의 사용자의 요청을 수용하고 빠르게 처리하고 대응하기 위함
  • 특히 Bottle neck 현상이 발생하는 I/O작업과 DB작업에서 주로 사용된다

👉쓰레드풀의 장/단점

 

장점

  • 쓰레드를 생성/수거하는데 비용이 들지 않음
  • 쓰레드가 생성될 때 OS가 메모리 공간을 확보해주고 메모리를 쓰레드에게 할당해줌
  • 생성비용은 들지만 이전의 쓰레드를 재사용할 수 있으므로 시스템 자원을 줄일 수 있다.
  • 대기중인 상태의 쓰레드로 작업을 하므로 작업실행에 딜레이가 발생하지 않음

단점

  • 쓰레드를 너무 많이 생성해두었다가 사용하지 않으면 메모리 낭비가 발생
  • 쓰레드풀의 단점 개선: Fork Join Thread Pool

큰 업무를 작은 업무로 나누어 배분, 일을 한 후에 일을 취합하는 형태

 

 

 

 

 

✅동시성(Concurrency)와 병렬성(Parallelism)

👉동시성(Concurrency) - 실제로 동시에 일어나는게 아님을 인지!! 

싱글코어에서 멀티스레드를 동작 시키기 위한 방식으로 멀티 태스킹을 위해 여러개의 스레드가 번갈아가면서 실행되는 성질 - 각 스레드들이 병렬적으로 실행되는 것 처럼 보이지만 사실은 번갈아 가면서 실행되고 있는 것

 

: 주로 단일 처리기(싱글 프로세서) 시스템에서 사용되며, 작업간의 우선순위, 스케쥴링, 작업 전환 등을 관리하기 위해 스레드, 이벤트 루프, 콜백 등의 기술을 활용한다 

: 작업의 독립성과 상호 의존성을 관리하고 작업간의 효율적인 자원 공유와 작업 진행을 조율하는 것에 중점 

 

👉병렬성(Parallelism)

멀티코어에서 멀티스레드를 동작시키는 방식으로 한개 이상의 스레드를 포함한 각 코어들이 동시에 실행되는 성질 - 데이터 병렬성, 작업 병렬성으로 구분된다.

 

: 주로 다중 처리기(멀티프로세서 또는 멀티코어) 시스템에서 사용됌

: 대규모연산, 데이터처리, 계산 집약적인 작업 등에서 유용

 

 

 

 

 

반응형