Process vs Thread

싱글 쓰레드의 경우 PCB, User Address Space, Shared Address Space를 한개의 프로그램에서 모두 가진다.
- 프로세스 단위
- 한개 쓰레드로 동작한다.
- 시스템 콜로 인한 쓰레드 Block이 일어나는 경우 [ ex) I.O 작업 ], 전체 프로세스가 Block 상태가 된다. [ 동시 작업 불가 ]
즉, 프로세스를 의미한다.

멀티 쓰레드의 경우 Thread Control Block, User Stack, Kernel Stack 을 각 쓰레드가 만들며, PCB,User Address Space,Shared Address Space 는 공유한다. [ 힙 영역은 공유된다. ]
TCB(Thread Control Block)는 TID, PC, Thread State등을 가지고 있다.
Thread 는 각각 상태를 가지고 있으며, 한개의 쓰레드가 다른 작업을 하거나 Block 상태에 있는 중에도 스케줄링에 의해 기존 쓰레드와 다른 작업을 수행 할 수 있다.
즉, 단일 프로세스 방식에서 I.O 블락이나, 막는 작업을 통해 발생되는 지연시간을 최소화 할 수 있다.
쓰레드는 User-Level Thread 와 Kernel Level Thread, 이 두가지를 섞은 쓰레드 방식이 존재하는데,
User-Level Thread의 경우 Kenel은 한개 프로세스가 동작하는 것으로 인식하여 작업 공간을 한개만 할당하고, UserSpace에서 Library 를 통하여 작업을 분할, 동작을 동시 하는 것 처럼 보이게 하는 방식이고,
-> 실제 쓰레딩이 아닌, 스케줄을 통한 작업
Kenel Level Thread의 경우 Kenel 이 각 쓰레드마다 작업공간을 할당하여, 동시 접근, 동시 동작하게끔 처리하는 것을 의미한다. [ CPU 코어 할당? ]
-> switch 시간이 걸린다.
스케줄링에 의한 작업과, 스위칭을 하는 작업으로 인해 무분별한 Thread 생성시에는 스위칭 시간이나, 스케줄 시간이 모두 소요 시간이 커지므로, 해당 부분에 대해 쓰레드 생성하는 이유에 위배된다.
[ 쓰레드를 사용하는 이유 : 동시에 여러 작업을 했을때 더 좋은 상황일 때 사용한다. ]
'프로그래밍 공부' 카테고리의 다른 글
| apache 설치 과정 [ apt-get / yum 안쓰는 것으로 ] (0) | 2021.02.13 |
|---|