[Chapter 11] 쓰레드의 이해

·2022년 10월 31일

※ 아래는 윤성우 뇌를 자극하는 윈도우즈 프로그래밍 한빛미디어(주) 2022년
Chapter11(p.351 ~ 367)를 읽고 정리한 내용입니다.

01 쓰레드의 특성

쓰레드

  • 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델
  • 프로세스처럼 완벽히 독립적인 구조가 아니다. 쓰레드들 사이에는 공유하는 요소들이 있다.
  • 쓰레드는 공유하는 요소가 있는 관계로 컨텍스트 스위칭에 걸리는 시간이 프로세스보다 짧다.

쓰레드의 특성

  • 쓰레드마다 스택을 독립적으로 할당해 준다.
  • 코드 영역을 공유한다.
  • 데이터 영역과 힙을 공유한다.
    (전역변수와 malloc 함수를 통해 동적 할당된 메모리 공간은 공유 가능)
  • 프로세스가 새로운 프로세스를 생성했을 때와는 달리 컨텍스트 스위칭이 빨라진다.
    (이는 캐쉬와도 관련이 있는데, 캐쉬는 CPU에서 한 번 이상 읽어 들인 메인 메모리의 데이터를
    저장하지 않고 있다가 CPU가 다시 그 메모리에 저장된 데이터를 요구할 때,
    메인 메모리를 통하지 않고 바로 값을 전달해주는 용도로 사용된다.
    프로세스간에 컨텍스트 스위칭이 일어나는 경우 캐쉬는 기존에 저장해 놓은 데이터를 완전히
    버리고 새로 쌓아 나가야 하지만 쓰레드의 경우 캐쉬를 비울 필요가 없다.)

02 커널 레벨 쓰레드와 유저 레벨 쓰레드

유저 레벨 쓰레드

쓰레드의 기능을 제공하는 라이브러리를 활용하는 경우 (커널에 의존적이지 않음)
장점 : 유저 모드에서 커널 모드로 전환이 필요 없음 -> 성능이 좋음
단점 : 커널 레벨 쓰레드에 비해 결과 예측이 어려움
(하나의 프로세스 내에 총 3개의 쓰레드 A, B, C가 있는 경우,
A 쓰레드가 시스템 함수를 호출했는데 커널에 의해 블로킹 되면 B, C도 실행되지 않는다.)

커널 레벨 쓰레드

프로그래머 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널인 경우
장점 : 커널에서 직접 제공해 주기 때문에 안정성과 다양한 기능성이 제공됨
단점 : 유저 모드에서 커널 모드로의 전환이 빈번하게 일어남 -> 성능 저하 유발

유저 영역

프로그램이 동작하기 위해 사용되는 메모리 공간(코드, 데이터, 힙, 스택 영역)

커널 영역

하나의 프로세스에게 할당된 총 메모리 공간 중 유저 영역을 제외한 영역

유저 모드

커널 영역으로 접근 금지

커널 모드

모든 영역(유저 영역, 커널 영역)에 접근 허용

0개의 댓글