본문 바로가기

CS/O.S

(운영체제) Thread의 개념

Light Weight Process라고도 한다.

  • 프로세스처럼 동작하긴 하지만 그것보단 작은 단위이다.

프로세스 : 프로세스 간에는 각 프로세스의 데이터 접근이 불가하다. (IPC를 통해서 통신)

 

Thread 

  • 하나의 프로세스에 여러 개의 스레드 생성이 가능하다.
  • Thread들은 동시에 실행 가능하다.
  • 프로세스 안에 있으므로 프로세스의 데이터를 모두 접근 가능하다. (IPC를 생성할 필요가 없다.)

 

 

 

 

Thread 별로 레지스터가 따로 있고 Stack도 따로 있다.

(SP, PC)

하지만 코드와 데이터는 공유 가능하다.

 

 

 

 

 

 

멀티 프로세싱과 Thread

멀티 태스킹 : 여러 프로세스가 하나의 CPU를 공유하는 기법

(프로세스가 변환되는 속도가 빠르기 때문에 사람의 눈에는 동시에 실행하는 것처럼 보인다.)

 

멀티 프로세싱 : 하나 이상의 프로세스를 여러 CPU를 사용하여 실행 속도를 높이는 기법

 

생각을 해보면 하나의 프로세스를 여러 CPU에 job을 어떻게 분배하는 것일까? 

  • 하나의 프로세스에 Thread를 여러 개 만들어서 처리하는 것이다.

Thread의 장점

1. 사용자에 대한 응답성 향상

 

웹 서버를 예시로 들면 웹 서버가 여러 클라이언트의 요청을 처리하려면 하나의 프로세스가 처리하기엔 조금 부담스럽다.

따라서 스레드로 작업을 나누어서 클라이언트의 요청을 병렬로 처리하면 요청 시간이 빨라진다.

 

2. 자원 공유 효율

 

  • 이전에 언급하였듯이 Thread는 IPC가 필요 없이 자원 공유가 가능하기 때문에 자원 공유를 위한 번거로운 작업이 필요가 없다.
  • 프로세스 안에 있으므로 프로세스 내부의 데이터를 모두 접근이 가능하다.

프로세스 여섯개를 돌리면 총 24GB의 용량이 소비되지만 스레드 6개를 돌리면 프로세스 하나에서 처리가 가능하기 때문에 4GB만 사용하면된다.


Thread의 단점

1. Thread 중 한 Thread만 문제가 있어도 전체 프로세스가 영향을 받는다.

 

멀티 프로세스

멀티 스레드

2. Thread를 많이 생성하면 콘텍스트 스위칭이 많이 일어나 성능이 저하된다.

 

Ex) Linux OS에서는 Thread를 프로세스와 같이 다룬다.

Thread를 많이 생성해버리면 모든 Thread를 스케쥴링해야하므로 콘텍스트 스위칭이 빈번할 수밖에 없다.