Program이란,
- 실행 가능한 파일
- 개발자가 작성한 코드를 여러 과정을 거쳐서 사용자가 실행시킬 수 있게 만들어진 파일
- 정적인 상태의 파일
Process란,
- 실행중인 Program(인스턴스)
- 동적인 상태의 컴퓨터 프로그램
- 프로그램을 실행하면 운영체제로 부터 실행할때 필요한 자원을 할당받게 되고 '프로세스'가 된다.
- 할방받는 자원 : CPU 시간, 운영되기 위한 주소 공간, Code, Data, Stack, Heap의 구조로된 메모리 영역
- 사용자가 실행하기 전까지 아무런 동작을 하고 있지 않지만 실행 시키는 순간 Process가 된다.
- 많은 Process들을 우리 눈에 동시에 실행되는 것처럼 보이지만 실제로는 하나의 CPU가 OS의 스케쥴링에 의해 Process들을 번갈아 실행 시키는 것입니다.
- 아래와 같이 프로세스는 별도의 주소 공간을 할당받아서 독자적인 메모리 공간을 받기때문에 서로의 메모리 공간을 공유할 수 없다.
![](https://velog.velcdn.com/images/parksegun/post/b04f214f-079d-4636-8f9a-d6f22cc7f39c/image.png)
프로세서의 프로세싱
과거에는 컴퓨터가 한번에 하나의 일(프로세스)밖에 하지못했습니다. 하지만 멀티태스킹기능이 나오면서 컴퓨터가 여러 프로세스를 돌리는 것이 가능해졌습니다.
- 프로세서 : 프로그램을 실행시키는 하드웨어유닛, 중앙 처리 장치(CPU), 명령어를 해석하는 부분
- 멀티 프로세싱 : 여러개의 프로세스를 사용하는 것
- 멀티 태스킹 : 같은 시간에 여러 개의 프로그램을 띄우는 것
프로세스의 동시성
프로세서는 한번에 하나의 프로세스를 실행시킬 수 있습니다.
때문에 동시성이란, 하나의 프로세서가 여러 작업의 프로세스를 돌면서(진행중인 작업을 스위칭) 일부분을 수행하는 방식입니다.
이렇게 작업을 바꾸는 과정을 'Context Switching' 이라고 하고 매우 빠른속도로 진행되기때문에 프로세스들이 동시에 작동하는 것처럼 보입니다.
프로세스의 병렬성
프로세서(CPU)에 여러 코어를 달아서 동시에 작업을 하는 방식
듀얼코어, 쿼드 코어와 같은 명칭이 이에 속한다.
한 프로세스 안에서도 여러가지 작업들이 동시에 진행되는 경우가 있다 이에 사용되는 것을 Thread라 한다.
Thread란,
- 프로세스가 할당 받은 자원을 이용하는 실행 단위
- Process 내에서 실제로 작업을 수행하는 주체
- Process는 작업을 수행할 때 1개 이상의 Thread를 사용
- Thread 들은 Stack 메모리만 각자 갖고 Data, Code, Heap 영역을 공유한다.
- 때문에 동기화, 데드락의 문제가 발생할 수 있다.
![](https://velog.velcdn.com/images/parksegun/post/03162893-cb5f-4c98-891b-438842c821a3/image.png)
프로세스와 쓰레드의 관계
프로세스는 쓰레드의 컨테이너 즉, 스레드의 정보를 갖고있는 것에 불과하다.
프로세스와 스레드 차이
프로세스의 각 작업을 처리하기위해 OS의 스케줄링으로 CPU를 점유하게 되는데 이때 시스템콜을 요청하는 부담이 생기지만 멀티 스레드를 사용하면 한번의 시스템콜로 처리할 수 있다.
![](https://velog.velcdn.com/images/parksegun/post/dadde1c8-e619-4e42-ab3b-d73af93024cd/image.png)
멀티프로세스와 멀티스레드
- 멀티 프로세싱이란,
- 여러개의 프로세스로 구성해서 하나의 프로세스가 하나의 작접을 처리하도록 하는 것
- 하나의 응용프로그램을 여러개의 프로세스로 구성하기위해서는 여러 CPU가 하나의 응용프로그램을 병렬로 처리하고 이는 실행속도를 올려준다.
- 멀티 프로세싱의 장점,
- 여러개의 프로세스중에 하나의 프로세스에서 오류가 발생하여도 자원을 공유지않기때문에 다른 프로세스는 영향받지 않는다.
- 멀티 프로세싱의 단점,
- Context Switching 하는 과정에 너무 많은 시간이 소요되고 무겁다
- 공유하는 자원이 없어 매번 데이터를 리셋해줘야한다.
- 프로세스간의 통신(IPC)기법으로 프로세스들 간의 변수를 공유할 수 없다.
- 멀티 스레딩이란,
- 하나의 응용프로그램을 여러개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
- 멀티 스레딩의 장점,
- 프로세스에 자원을 할당하는 시스템 콜이 줄어들기에 효율적이다.
- stack을 제외한 메모리를 공유하기때문에 데이터를 주고 받는 것이 간단하고 빠르다.
- 멀티 스레딩의 단점,
- 동기화, 교착상태 발생
- 개발자가 직접 동기화 문제를 대응할 수 있어야한다.
- 설계가 복잡하다
- 디버깅이 까다롭다
- 다른 프로세스에서 각각의 스레드를 제어할 수 없다.
- 하나의 스레드에 오류가 발생하면 다른 스레드가 영향을 받는다
멀티프로세싱(Multiprocessing)은 컴퓨터에서 여러 개의 프로세스를 동시에 실행하여 작업을 병렬로 처리하는 기술입니다. 이 기법은 CPU의 여러 코어를 효과적으로 활용하여 성능을 향상시키고, 대규모 데이터 처리나 계산 집약적인 작업을 보다 빠르게 수행할 수 있게합니다.(하지만 멀티 스레딩이 더 좋음)
![](https://velog.velcdn.com/images/parksegun/post/76af81b9-fa9e-474f-988c-a4d50760786d/image.jpg)
정리
- 멀티프로세스를 사용하는 것보다 멀티 스레드를 사용하는 것이 프로세스를 생성해서 OS의 스케줄링으로 CPU를 할당하는 시스템 콜을 줄일 수 있기에 자원을 효율적으로 관리할 수 있다.
- 스레드 서로는 stack을 제외한 메모리(code, data, heap)을 공유하기때문에 데이터를 주고받는 것이 간단해지고 결국 시스템 자원 소모가 줄어들게 된다.
- IPC보다 스레드들간의 통신이 비용이 적기에 통신 부담이 적다
- 프로세스간 전환 속도보다 스레드간 전확속도가 빠르다(공유하기때문)
단어 설명
- IPC : 프로세스간 통신 (다른 프로세스 자원에 접근하기위해 사용)