본문 바로가기
운영체제

프로세스(PROCESS) , 스레드(THREAD) #2

by 성장하는 Sap린이 2020. 1. 7.

단일 스레드 / 멀티 스레드

 

운영체제의 지원 여부에 따라 단일 스레드 , 다중 스레드로 나뉠 수 있다

프로세스에 하나의 제어 모델이 있으면 단일 스레드이며,

프로세스가 다수의 제어 스레드를 가진다면 다중 스레드 모델이다.

 

 

단일 스레드

  • 하나의 프로세스에서 하나의 스레드 실행
  • 하나의 레지스터와 스택으로 표현

 

멀티 스레드

  • 프로그램을 다수의 실행 단위로 나누어 실행
  • 프로세스 내에서 자원을 공유하여 자원 생성과 관리의 중복을 최소화
  • 서버가 많은 요청을 효율적으로 수행 할 수 있는 환경 제공
  • 각각의 스레드가 고유의 레지스터와 스택으로 표현됨

 


 

단일 스레드 / 멀티스레드의 장단점

 

단일 스레드 장점

 

1. 자원 접근에 대한 동기화를 신경 쓰지 않아도 된다.

 

2. 문맥 교환(context switch) 작업을 요구하지 않는다.

 

문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다.

 

단일 스레드 단점

 

1. 여러 개의 CPU를 활용하지 못한다.

 

멀티 스레드 장점

 

1. 새로운 프로세스를 생성하는 것보다 자신이 속한 프로세스에서 스레드를 생성하는 것이 빠르다.

 

2. 멀티 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다.

 

3. 프로세스의 문맥 교환보다 스레드의 문맥 교환이 더 빠르다.

 

4. 멀티 프로세서 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.

 

5. 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속된다.

 

6. 멀티 스레드는 stack 영역만 비 공유하고 데이터 영역과 힙 영역을 공유한다.

 

https://xeros.dev/63 (그림참조)

 

멀티 스레드 단점

 

1. 하나의 스레드만 실행 중일 때에는 실행시간이 되려 지연될 수 있다.

 

2. 스레드 스케줄링을 신경 써야 한다.

 

3. 자원 공유 문제가 발생한다(동기화 문제)

ex) 한 프로세스 안에서 실행되는 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.

 

4. 하나의 스레드의 문제가 발생하면 전체 프로세스에 영향을 끼친다.

 

5. 구현하기 어렵다.

 

6. 디버깅하는 게 어렵다.

 

7. 교착상태에 빠지지 않도록 주의해야 한다.

 


 

멀티 프로세스 / 멀티 스레드

멀티 프로세스와 멀티 스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티 프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티 스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 또한 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

멀티 프로세스

  • 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것.

장점

  • 여러개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.

단점

  • Context Switching 오버헤드 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
  • 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프롯 세스 사이에서 공유하는 메모리가 없어,  Context Switching이 발생하면 캐시에 있는 모든 데이터를 전부 리셋하고 다시 캐시 정보를 불러와야 한다.
  • 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.

 

멀티 프로세스 vs 멀티 스레드

 

https://xeros.dev/63 그림참조

멀티 프로세스는 두 개 이상의 프로세서를 가진 시스템이다. 시스템의 속도를 높이기 위해 CPU가 시스템에 추가된다.

각 CPU에는 레지스터와 캐시가 있다.

 

 

 

https://xeros.dev/63 그림참조

멀티스레딩은 프로세스의 콘텍스트 내에서 단일 프로세스의 여러 스레드를 동시에 실행하는 것이다.

 

멀티 프로세싱과 멀티 스레딩의 주요 차이점

 

1. 멀티 프로세싱을 사용하면 시스템에 2개 이상의 CPU가 추가되는 반면 멀티 스레딩을 사용하면 프로세스가 여러 스레드를 생성하여 시스템의 컴퓨팅 속도를 높일 수 있다.

 

2. 다중 처리 시스템은 여러 프로세스를 실행 하지만  다중 스레드 시스템은 프로세스의 여러 스레드를 동시에 실행한다.

 

멀티 프로세스와  멀티스레드의 동작원리

 

프로그램이 동작하기 위해서는 두 가지의 메모리 공간이 필요하다 그것이 코드 공간과 데이터 공간이다.

 

코드 공간: 특정 프로세스의 동작상태를 기록하는 것으로 하나의 프로세스가 독립적인 코드 포인터를 가지고 동작하기 위해 필요.

 

데이터 공간: 하나의 프로세스가 작동 중에 필요로 하는 데이터를 저장해 두기 위한 것으로 프로그램 변수나 메모리 스택 공간을 말한다.

 

하나의 프로세스는 동작하기 위해 이러한 두 가지의 공간을 모두 요구한다.

 

 

멀티 프로세스 <멀티 스레딩

 

멀티 프로세스보다 멀티 스레딩이 더 효율적이다

프로그램을 여러 개 키는 것 보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이 더 효율적.

 

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html 그림참조

 

멀티 프로세스로 할 수 있는 작업들을 멀티 스레딩으로 하는 이유

 

1. 멀티 프로세스로 실행되는 작업을 멀티 스레드로 할 경우 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.

 

2. 프로세스 간의 Context Switching시 캐시, 메모리에 대한 데이터까지 초기화가 되어서 오버헤드가 크다.

 

3. 스레드는 프로세스 내의 메모리를 공유하기 때문에 데이터 교환이 더 간단하다.

 

4. 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

 

5.  프로세스 간의 통신 보다 스레드 간의 통신이 메모리와 자원 할당에 필요한 비용을 줄일 수 있다.

 

IPC를 통한 프로세스간의 통신

프로세스간 데이터 교환을 하려면 소켓이나 공유 메모리 같은 IPC(Inter Process Communication)을 이용해서 데이터 교환을 해야 한다.

 

스레드 간 통신

프로세스를 뛰우기 위해 메모리와 자원을 할당하는 작업 없이 이미 프로세스에 할당된 자원과 메모리를 그대로 사용하여 스레드를 생성하여 작업하므로 메모리와 자원 할당에 필요한 비용을 줄일 수 있다.