스레드(Thread)

GamzaTori·2024년 2월 26일
0

Operating System

목록 보기
5/7

스레드(Thread)


프로세스의 한계

  • 기술이 발전함에 따라 프로그램이 복잡해짐으로써 프로세스의 작업 하나만으로 프로그램을 실행하기에는 한계가 있었고 이러한 한계점을 극복하기 위해 스레드가 고안되었습니다.

스레드란?

  • 스레드는 프로세스 내부에서 실행되는 작업의 단위입니다.
  • 하나의 프로세스에는 반드시 하나 이상의 스레드가 존재합니다.
  • 프로세스의 Code, Data, Heap 영역을 공유하며 각각의 스레드는 별도의 Stack 영역을 가집니다.

각 스레드는 독립적인 실행 흐름을 갖기 위해서 독립적인 함수 호출, 반환을 위한 스택과 스레드가 수행한 명렁어를 가르키는 PC(Program Counter)가 스레드마다 독립적으로 갖고 있습니다.

스레드의 상태



TCB(Thread Control Block)

  • 스레드의 실행 상태, ID, 우선순위등을 포함하고 있으며 스레드가 생성될 때 운영체제에 의해 생성되고 스레드가 실행을 마치면 함께 소멸됩니다.
  • 스레드간 동기화 진행 시 뮤텍스와 같은 정보를 TCB에서 관리합니다.

프로세스의 Context Switching과의 차이점

  • 스레드의 Context Switching은 스레드의 스택, 레지스터 등에 대한 정보를 담고 있는 TCB가 프로세스의 PCB보다 가볍기 때문에 스레드의 Context Switching이 프로세스의 Context Switching보다 가볍습니다.
  • 프로세스의 Context Switchcing이 발생하면 다른 프로세스의 새로운 명렁어와 데이터를 로드해야하기 때문에 CPU 캐시 메모리의 초기화로 비용이 높습니다.
  • 반면 스레드의 경우 스택과 레지스터 등의 정보만을 변경하면 되므로 상대적으로 비용이 낮습니다.
  • 스레드의 경우 공유하는 자원에 여러 스레드가 동시에 접근하는 경우 경쟁 상태(Race Condition)이 발생할 수 있으므로 lock과 같은 방법으로 자원의 동기화가 필요합니다.

스레드의 장점

  1. 응답성
    • 다른 스레드의 실행 시간이 길거나 입출력 요청 및 인터럽트 등으로 Blocking 되더라도 프로그램을 계속해서 실행할 수 있다
  2. 자원의 효율적인 사용
    • 프로세스 내의 리소스(Code, Data, Heap)의 공유로 인해 공유를 위한 메모리 공간, IPC 통신 등 추가적인 비용이 발생하지 않는다.
    • 또한 프로세스는 프로세스 생성을 위한 메모리와 자원, 프로세스 간 문맥교환(Context Switching) 비용이 발생하는 반면 스레드는 자원을 공유하기 때문에 자원 공유의 효율이 좋다
  3. 동시성(병렬성)
    • 여러 개의 스레드가 동시에 실행될 수 있어서 작업을 병렬적으로 처리할 수 있다.

스레드의 단점

  1. 데이터의 무결성 및 신뢰성
    • 여러 스레드에서 공유 자원에 대해 동시에 접근 및 수정할 경우 데이터의 무결성과 신뢰성을 보장할 수 없다.
    • 따라서 데이터의 수정 시 Lock, Atomic 등 조치가 필요하다.
    • 하지만 무분별하게 Lock을 사용할 시 오히려 성능 저하 및 데드락(Dead Lock)이 발생하여 프로그램이 종료될 수 있다
  2. 성능 저하
    • 무분별한 다수의 스레드 생성은 오히려 빈번한 문맥 교환으로 인해 성능이 저하될 수 있다
  3. 동기화
    • 여러 스레드가 공유 자원에 동시에 접근할 경우 경쟁 상태(Race Condition) 문제로 인해 결과값이 달라질 수 있다

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

멀티 스레드: 하나의 프로세스 내부에서 여러 개의 스레드가 동시에 실행되는 것

  • 스레드끼리는 서로의 메모리 공간(Thread Stack)을 공유하고 접근할 수 있으며 IPC 통신이 아닌 메모리 기반 통신을 사용하기 때문에 통신 속도가 빠르다

멀티 프로세스: 여러개의 독립적인 프로세스가 동시에 실행되는 것

  • 각 프로세스는 독립된 메모리 공간을 가지며 서로에게 접근하려면 IPC 통신을 사용해야 한다

IPC(Inter Process Communication): 프로세스간 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다

프로세스와 스레드의 차이

프로세스

  • 운영체제에게 자원을 할당받은 작업의 단위
  • 프로세스는 운영체제에게 각각의 독립된 메모리 공간(Code, Data, Stack, Heap)을 할당받는다.

스레드

  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 스레드는 프로세스 내의 자원(Code, Data, Heap)을 공유하며 접근 할 수 있다
  • 스레드마다 별도의 Stack 공간을 갖는다.

프로세스란

profile
게임 개발 공부중입니다.

0개의 댓글