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