[운영체제] 쓰레드(Thread)란? | 쓰레드 프로세스 차이 | 멀티프로세스 멀티쓰레드 차이

쓰레드란(Thread)란?

쓰레드의 구조

쓰레드(Thread)란 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위 라고 할 수 있다. 

쓰레드는 다음과 같은 특징을 가지고 있다. 

  • 쓰레드는 각자 자신의 Stack 영역을 보유한다. ( 최소한 자신의 레지스터 상태를 보유한다 ) 
  • 쓰레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다.
  • 쓰레드를 생성하고 switching 하는 것은 inexpensive(비싸지않은) 하다.

쓰레드와 프로세스 차이

쓰레드와 프로세스는 다음과 같은 차이들이 존재한다.

  • 프로세스는 각자 프로세스간의 통신에 IPC가 필요하다. 쓰레드는 쓰레드 간의 통신에 IPC가 필요하지 않다.
  • 각 프로세스는 Code, Data, Heap, Stack 영역을 각자 보유한다. 쓰레드는 Code, Data, Heap 영역은 공유하고 Stack영역만 각자 보유한다.
  • 프로세스는 생성과 context switching에 많은 비용이 들어간다. 쓰레드는 생성과 context switching에 적은 비용이 들어간다.

멀티 프로세스(Multiprocessing)와 멀티 쓰레드(Multithreading) 차이

멀티 프로세싱은 여러 개의 프로세스가 각자 하나의 작업(task)을 맡아 처리하는 것을 뜻한다. 멀티 쓰레딩은 여러 개의 쓰레드가 각자 하나의 작업(task)을 맡아 처리하는 것을 뜻한다. 둘은 다음과 같은 차이들이 존재한다.

  • 멀티 프로세싱 
    • Context Switching이 발생하면 캐시에 존재하는 모든 데이터를 리셋 하고 다시 캐시 정보를 불러와야한다. 즉 Context Switching의 오버헤드(overhead)가 커서 비용이 크다.
    • 프로세스간의 통신에 복잡한 IPC를 사용하여 통신해야 한다. 
    • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스에만 이상이 생기고 다른 프로세스에는 영향을 주지 않는 장점도 존재한다.
  • 멀티 쓰레딩
    • 시스템 자원 소모가 감소한다. 프로세스를 생성하는 system call이 줄어들어 자원을 효율적으로 관리할 수 있다.
    • 시스템 처리량(Througput)이 증가한다. concurrency와 parallelism을 얻을 수 있기 때문에 효율적이다.
    • 프로세스 내의 Data, Code, Heap 영역을 공유하기 때문에 쓰레드 간의 통신이 간단하다. 
    • 쓰레드 간의 자원을 공유하기 때문에 동기화 문제(Synchronize problem)가 발생할 수 있다.
    • 디버깅이 까다롭다.
    • 하나의 쓰레드에 문제가 발생하면 전체 프로세스에 영향을 준다.
반응형

댓글

Designed by JB FACTORY