Difference | Process | Thread |
---|---|---|
Definition | 실행되고 있는 프로그램 | 프로세스 내에서 실행되는 여러 흐름의 단위 |
Resource Allocation | 프로그램이 실행될 떄 마다 새로운 자원 할당 | 프로세스의 자원을 공유 |
Resource Sharing | 일반적으로 자원을 공유하지는 않으나, 코드는 같은 프로그램 내에서 공유될 수도 있음 | 스택을 제외한 힙, 데이터, 코드 |
Address | 분리된 주소 공간 | 공유된 주소 공간 |
Communication | IPC(Inter-Process Communication)를 통해 통신 | 공유 변수를 수정하면서 자유롭게 통신 |
Context Switching | 스레드보다 느림 | 스레드보다 빠름 |
※ 스레드는 하나의 프로세스안에 여러 개 존재할 수 있음
스레드의 장점
- 사용자 응답성 (Responsivenss)
- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능- 자원 공유 (Resource sharing)
- 자원을 공유해서 효율성 증가 (커널의 개입1을 피할 수 있음)
---> ex) 동일 주소 공간에서 여러개의 스레드- 경제성 (Economy)
- 프로세스의 생성, context switch에 비해 효율적- 멀티 프로세서 (Multi-processor) 활용
- 병렬처리를 통해 성능 향상
사용자 영역의 스레드 라이브러리로 구현 됨
- 스레드의 생성, 스케줄링 등
- POSIX threads, Win32 threads, Java thread API 등
커널은 스레드의 존재를 모름|pros|cons|
Pros | 생성 및 관리의 부하가 적음, 유연한 관리 기능, 이식성(Portability)이 높음 |
---|---|
Cons | 하나의 스레드가 block 상태가 되면 모든 스레드가 대기 (single-threaded kernel의 경우) |