04 쓰레드와 쓰레드풀

코이그·2023년 7월 1일

CS 스터디

목록 보기
3/4

프로그램

  • 컴퓨터에서 실행 가능한 명령어의 집합.

프로세스

  • 컴퓨터에서 실행 중인 프로그램의 인스턴스.

  • 단일 스레드 프로세스 - 실행 흐름이 하나 뿐인 프로세스

  • 멀티 스레드 프로세스 - 실행 흐름이 여러 개인 프로세스

프로세스로만 작업 처리 시 문제점:

  1. 프로세스 생성 시 오버헤드 발생
  2. 문맥 교환 시 오버헤드가 큼
  3. 프로세스 간 통신이 어려움

스레드

  • 프로세스를 구성하는 실행 흐름의 단위

프로세스의 스택을 제외한 힙, 코드, 데이터 영역은 스레드끼리 공유함.
스택 영역은 각 스레드가 독립적으로 할당받음.

스레드가 실행되는 데 필요한 정보는 스택에 독립적으로 저장을 하지만, 동적 정보는 힙에 저장되고 모든 스레드가 이를 공유한다.

스레드로 작업 처리 시 장점:

  1. 프로세스보다 작은 실행 단위 구현 가능
  2. 프로세스 생성 시 오버헤드 감소
  3. 자원을 공유하기 때문에 빠른 문맥교환
  4. 프로세스 간 통신

멀티 프로세스

컴퓨터에서 동시에 여러 개의 프로세스가 실행되는 방식.

  • 각각의 프로세스는 독립된 메모리 공간을 가지고 실행 흐름과 리소스를 독립적으로 관리함

  • 서로 다른 작업 or 병렬(동시) 작업 처리

장점

  • 각각의 프로세스가 독립적으로 실행되기 때문에 서로 영향을 주지 않음 (한 프로세스에 문제가 생겨도 다른 프로세스에는 영향 x)

단점

  • 프로세스 간 문맥교환이 자주 발생하므로 성능에 영향을 줌.
  • 프로세스마다 독립적인 메모리 공간이 있어야 하므로 프로세스가 많아질 수록 차지하는 메모리가 많아짐.

멀티 스레드

  • 컴퓨터에서 단일 프로세스 내에서 동시에 여러 개의 스레드가 실행되는 방식.

장점

  • 스레드 간 데이터를 공유하며 통신이 원활함. -> 작업의 효율성 up
  • 문맥교환의 비용이 멀티 프로세스의 문맥교환보다 적음

주의할 점

  • 교착상태: 한 스레드가 점유한 자원을 다른 스레드가 무한으로 기다리고, 반대로도 마찬가지인 상태.
    식사하는 철학자 문제

스레드 풀

일정한 개수의 스레드들을 미리 생성하고 작업이 들어왔을 때 스레드 중 하나에 작업을 할당하여 처리하는 기법.

사용하는 이유

스레드 생성 및 제거에 대한 오버헤드를 줄이고 스레드를 재사용하여 처리 속도와 성능을 향상시키기 위해

구성 요소

  1. 작업 큐
    • 스레드 풀이 작업을 저장하는 공간. 작업이 도착했을 때 여기에 추가되고 스레드가 작업을 수행할 때 여기에서 가져감.
  2. 스레드 생성 및 제거 매커니즘
    • 몇 개의 스레드를 미리 생성할 지 등
  3. 스레드 관리자
    • 스레드의 생성, 할당, 반환, 우선순위 관리 등을 수행

동작

  1. 초기화: 미리 정해진 개수의 스레드를 생성. 이 때 스레드들은 작업이 들어오기를 기다리는 상태.
  2. 작업 요청: 외부에서 작업이 도착하면 작업 큐에 추가되고 해당 작업은 스레드 풀에게 요청됨.
  3. 작업 할당: 작업 큐에서 작업을 꺼내어 실행 가능한 스레드에게 할당함.
  4. 작업 실행: 할당된 스레드는 작업을 실행하고, 완료되었을 때 다음 작업을 위해 작업 큐에서 다시 작업을 가져옴.
  5. 스레드 재사용: 작업이 완료된 스레드는 작업 큐로 돌아가 새로운 작업을 할당받은 준비를 함.
  6. 작업 완료: 모든 작업이 완료되면 스레드 풀은 종료될 수 있음. 하지만 작업 큐가 비워질 때까지 모든 스레드는 대기 상태 유지.

단점

  1. 정의된 스레드보다 더 많은 양의 작업이 들어오면 다 작업 큐에 추가됨. 메모리 사용량 up
  2. 작업이 처리되기 위해 스레드를 기다려야하기 때문에 이에 따른 지연이 발생할 수 있음.
  3. 작업의 우선순위 관리 어려움
  4. 교착상태 발생 가능

동시성(Concurrency) vs. 병렬성(Parallelism)

동시성

여러 작업이 동시에 실행되는 것처럼 '보이는' 개념.
실제로는 각 작업이 작은 시간 단위로 번갈아가며 실행됨.

  • 주로 단일 프로세서 환경에서 활용됨

병렬성

여러 작업이 실제로 동시에 실행됨.
여러 프로세서 또는 코어가 동시에 작업을 처리함.

  • 주로 멀티 프로세서 환경에서 활용됨
profile
COYG🔴⚪

0개의 댓글