프로세스와 쓰레드가 각각 무엇인지, 어떤 차이점이 있는지 알아보겠습니다.
한 문장으로 설명하면 다음과 같습니다.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위
그림으로 나타내면 아래와 같습니다.
[Process]
프로세스는 운영체제로부터 주소공간, 파일, 메모리 등을 할당 받습니다.
그러므로 각 프로세스는 독립적이며  자신만의 고유 메모리를 할당받아 사용합니다.
그리고 프로세스는 실행중인 프로그램을 의미합니다.
그러므로 프로세스는 프로그램이 될 수 있지만, 프로그램은 프로세스가 될 수 없습니다. 실행중이지 않은 프로그램도 존재하기 때문입니다.
[Thread]
그러나 쓰레드는 프로세스 안에 존재하며, 여러 쓰레드가 자원을 공유할 수 있습니다.
쓰레드는 프로세스 내에서 각각의 스택 공간을 제외한 모든 주소공간과 자원들을 대부분 공유합니다.
그렇기 때문에 메모리 공간은 물론 시스템 자원 소모도 현격히 줄어듭니다.
멀티쓰레드에 대해 다음과 같은 장,단점이 있습니다.
장점
- 시스템의 throughput이 향상 
- 시스템의 자원 소모가 줄어든다 
- 프로그램의 응답 시간이 단축 
- 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 더 간단 
통신 방법이 더 간단하다는 말은, 쓰레드끼리 자원을 공유하기 때문에 데이터 세그먼트, 전역변수를 이용하여 간단히 통신을 할 수 있다는 뜻입니다. 
하지만 다음과 같은 단점이 있습니다.
단점
- 자원을 공유하기 때문에 동기화에 신경써야한다.
- 다시 말해 설계를 잘해야한다.
- 프로그램 디버깅이 어렵다
- 단일 프로세서 시스템에서는 효과를 기대하기 어렵다
본 글은 아래 블로그를 참고하여 작성했습니다.
반응형
    
    
    
  'Computer Science > 운영체제' 카테고리의 다른 글
| 세마포어(Semaphore)와 뮤텍스(Mutex) (0) | 2017.10.13 | 
|---|---|
| 메모리 관리기법, 페이징과 세그멘테이션 (1) | 2017.10.09 | 
| 외부단편화와 내부단편화 (0) | 2017.10.07 |