본문 바로가기
지식

멀티 프로세스 Multi-Process 멀티 스레드 Multi-Thread

by Ele(단단) 2023. 3. 22.
반응형

멀티 프로세스 (Multi-Process), 멀티 스레드 (Multi-Thread)

프로세스(Process)

 

process

 

- 프로그램이 실행되어 메모리에 올라가 있는 상태, 이 상태를 프로세스라고 부른다.

- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

- 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스에 접근이 불가하다.

 

쓰레드(Thread)

thread

 

- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

차이점 

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다.

스레드는 할당 받은 자원을 이용하는 실행의 단위이고 프로세스 내에 여러개 생길 수 있다.

어플리케이션 하나가 프로세스이고, 그 안에서의 분기 처리가 스레드가 되는 셈이다.

 

멀티 프로세스 (Multi-Process)

멀티 프로세스

 

하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(task)를 처리하는 것이다.

- 장점 : 하나의 프로세스가 잘못 되어도 프로그램은 동작 함 

- 단점 : context switching(CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정) 비용(동작중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고 대기 하고 있다가 다시 실행시 복구하는 시간) 발생 

 

멀티 스레드 (Multi-Thread)

멀티 스레드

 

프로그램을 여러개의 쓰레드로 구성하고 각 쓰레드가 작업(task)를 처리하는 것

- 장점 : 시스템 자원 소모 감소, 처리 비용 감소(실행 속도 향상), 쓰레드간 자원 공유(stack 영역) 

- 단점 : 디버깅 어려움, 동기화 이슈 발생, 하나의 쓰레드의 오류로 전체 프로세스에 문제 발생

 

왜 멀티 프로세스로 할 수 있는 작업들을 굳이 하나의 프로세스에서 스레드로 나눠가며 할까?

  • 운영체제가 시스템 자원을 효율적으로 관리하기 위해 스레드를 사용한다.
  • 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
  • 또한, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다. (처리비용 감소. 프로세스는 독립구조이기 때문)

그렇다면 무조건 멀티 스레드가 좋을까?

스레드를 활용하면 자원의 효율성이 증가하기도 하지만, 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제가 발생 할 수 있으므로 프로그래머의 주의가 필요하다.

 
반응형

댓글