Process와 Thread의 비교


1. 개념이 다르다: Process는 Thread의 상위개념이다.


- Process가 생성된다는 것은 1개의 Process와 그 안에 1개의 Thread 가 생성되는 것.

- Multithreaded process는 이 안에 Thread가 여러개 생성될 수 있다는 것.

- 따라서 차이는 Single Thread process와 Multi Thread process를 비교하는 것이 효과적이다.



2. Memory 구성의 차이

출처: https://randu.org/tutorials/threads/

- Process는 개별적 Kernel, Code, Data, Heap, Stack 영역을 가지고 있다.

   대부분의 OS에서 Inter-Process Communication(IPC혹은 RPC)을 지원하여 Shared memory를 통해서 Process간의 제한적인 공유가 가능하다.

- Thread는 개별적 Stack, Register, PC등을 가지고 있다. 나머지는 Process의 것을 공유한다.



2-1. Process Memory 구성(Linux)


Kernel space: Kernel을 위한 영역으로 물리주소와의 매핑하며 언제든지 Switching이 일어날 수 있도록 준비하는 영역이다.

   user mode로는 접근할 수 없는 영역, 보통 설명시 생략된다.

Text(Code) Segment: 실행하는 코드를 저장하는 영역(bin을 올린다.)

- Data, BSS Segment: 전역변수/상수 등을 저장, 보통 통틀어 Data영역으로 부른다.

   구분하자면  Data - 초기화된 변수들, BSS - 초기화되지 않은 변수들

Heap: 동적할당된 부분 저장

Stack: ??  UNIX는 각 Thread의 stack을 여기에 할당해주는 것으로 보임.



2-2. Thread Memory 구성(POSIX)

Stack: Thread만의 지역변수, 매개변수, 리턴값을 저장.

  Windows - Virtual Memory에 할당

  UNIX - Process stack에 할당

  LINUX - ?? 커널이 할당해줌

Stack pointer

Program Counter(PC)

Registers: ?? CPU에 등록되는 그 레지스터를 의미하는지 잘 모르겠음

- 나머지는 Process 자원을 공용



2. 실행의 차이

- 기본적으로 OS는 Process단위로 스케줄링을 한다.

   따라서 User Level Thread(ULT)들은 Process가 block되면 모두 block된다.

- Kernel Level Thread(KLT)의 경우는 ULT보다 비용은 비싸지만 독립적 실행이 가능하다.

  따라서 Kernel-supported-threads 혹은 lightweight process라고 부르기도 한다.



3. Process보다 Thread를 쓰는 장점

- Process를 만들고 종료하는 것보다 Thread로 하는 것이 더 빠르다.

- Thread가 Context switching이 빠르다.

- IPC 통신을 하지 않아도 된다.

- 자원의 효율적 사용



3-1. Thread를 써서 장점을 보는 예

- 화면과 Background를 나누어 실행

- 주기적 백업 실행

- 파일을 나누어 읽기



4. Thread보다 Process를 쓰는 장점(Thread 단점)

- Thread를 많이 생성하면 오히려 저하가 일어날 수 있다.

- Single processer에서는 효과를 기대하기 어렵다.

- Thread는 디버깅이 어렵다.



Reference:

- Operating Systems Internals and Design Principles - William Stallings

- http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

- https://computing.llnl.gov/tutorials/pthreads/

- https://randu.org/tutorials/threads/

- https://www.tutorialspoint.com/operating_system/os_multi_threading.htm

- http://sfixer.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%ADcode-data-stack-heap

- http://lalwr.blogspot.kr/2016/02/process-thread.html

+ Recent posts