본문 바로가기

프로그래밍 공부

Thread 공부

Process vs Thread

 

PCB 출처 : https://empty-cloud.tistory.com/28

싱글 쓰레드의 경우 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 생성시에는 스위칭 시간이나, 스케줄 시간이 모두 소요 시간이 커지므로, 해당 부분에 대해 쓰레드 생성하는 이유에 위배된다.

[ 쓰레드를 사용하는 이유 : 동시에 여러 작업을 했을때 더 좋은 상황일 때 사용한다. ]