1. 스레드

  • CPU 활용의 기본 단위
  • 명령을 실행하는 기본 단위
  • 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택으로 구성
  • 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, open files 등의 운영체제 자원 공유

단일 스레드

  • 1개의 레지스터, 1개의 스택
  • 장점 : 자원을 공용화 하지 않으므로 접근을 통제할 필요가 없다
    컨택스트 스위치 불필요
  • 단점 : 다수의 CPU가 있다면 활용 불가 (?)

멀티 스레드

  • 프로그램을 다수의 실행 단위로 나눠 실행

  • 각각의 스레드가 고유의 레지스터와 스택으로 표현

  • 장점
    대응적 : 일부가 차단되거나 장시간 작업 수행에도 계속 실행 가능(다른 스레드를 사용하면서 다운되지 않음)
    자원 공유성 : 프로세스의 자원과 상태를 공유하여 효율적
    경제성 : 속한 프로세스의 자원을 공유하기 때문에 스레드를 만들고 컨텍스트 스위치를 진행하는 것이 더 경제적 (자원이 겹칠 경우에 똑같은 자원을 메모리에 할당하면 비경제적)
    확장성 : 다수의 코어에서 병렬로 프로세스 실행

  • 유저 스레드와 커널 스레드

  1. 멀티스레드 - 다대일 모델
    다수의 유서 스레드가 하나의 커널 스레드와 맵핑
    한 번에 하나의 스레드만 커널 스레드에 접근할 수 있으므로 멀티 스레드는 멀티 코어 시스템에서 병렬로 실행할 수 없음

  2. 멀티스레드 - 일대일 모델

  • 각각의 유저 스레드를 커널 스레드와 맵핑
  • 더 많은 병렬성이지만 사용자 수준 스레드 생성에도 커널 스레드 생성이 필요하다는 단점
  1. 멀티 스레드 - 다대다 모델
  • 많은 유저 스레드, 그 수보다 작거나 같은 수의 커널 스레드
  • 스레드가 봉쇄형 시스템 호출 방생 시에도 커널은 다른 스레드 수행을 스케쥴 할 수 있음
  1. 멀티스레드 - 2단계 모델
  • 다대다와 일대일을 혼합
  • 반드시 일대일 스레드가 필요한 경우 허용한다

2. 스레드 풀

암묵적 스레딩

  • 지정된 개수의 스레드를 미리 생성하고 필요하면 풀에서 꺼내어 사용하는 방식
  • 요청이 폭등해도 성능을 유지한다
  • 대량 작업 처리에 반드시 고려해야 한다
  • 장점
    급격한 대량 작업에서 급격한 성능 저하 방지
    동시 사용자수 증가에도 대응 가능
    이전 생성 스레드 재사용 가능(원래는 버림)
  • 단점
    과다 생성시 메모리 낭비 발생
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글