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

이진호·2022년 8월 31일
0

OS

목록 보기
1/2
post-thumbnail

멀티 프로세스(Multi Process)

멀티 프로세스(Multi Process)

하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 프로세스별 하나의 작업을 처리하는 방식입니다.

장점

프로세스간 격리

프로세스는 각각 독립된 프로세스 주소 공간(Code, Data, Stack, Heap)을 운영체제로부터 할당 받습니다. 이로 인해 하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스가 영향을 받지 않는다는 장점이 있습니다.

프로세스
프로세스 주소 공간(Process Address Space)

동기화 작업 불필요

프로세스 단위의 독립된 메모리 영역을 할당받았기 때문에 따라서 멀티 스레드와 달리 자원 공유 문제가 발생하지 않고 별도의 동기화 작업이 필요하지 않습니다.

단점

Context Switching으로 인한 오버헤드

멀티 프로세스 환경에서는 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되는 과정을 수행하게 되는데, 이 과정에서 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 Context Switch(Context Switching)을 진행하게 됩니다.

프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 공유하는 메모리가 없습니다. 그러므로 Cache 초기화, Memory Mapping 초기화 등 Context Switching간 무거운 작업이 진행되고 많은 시간이 소모되는 오버헤드가 발생하게 됩니다.

Context Switching

복잡한 프로세스 간 통신

프로세스는 각 독립된 메모리 영역을 할당받으므로 프로세스 사이에 변수나 자료구조를 공유할 수 없습니다. 그러므로 IPC(Inter-Process Communication, IPC)라는 통신 기법을 통해 데이터를 교환해야하는데, 이 과정은 다소 어렵고 복잡합니다.

프로세스 간 통신 방법(Inter Process Communication, IPC)

멀티 스레드(Multi Thread)

하나의 응용 프로그램을 여러 개의 스레드로 구성하고, 각 스레드가 하나의 작업을 처리하는 방식입니다.
멀티 스레드(Multi Thread)

장점

적은 Context Switching 오버헤드

멀티 스레드는 하나의 프로세스에서 Heap, Code, Data 주소 공간을 공유하고, Stack 영역만 각 스레드마다 별로 따로 두어서 자원을 관리합니다.

이와 같은 구조로 인해 Stack 영역에서만 Context Switching이 발생하기 때문에 비교적 적은 오버헤드가 발생합니다.

간단한 통신 방식

프로세스 내 Stack 영역을 제외한 나머지 메모리 영역을 공유하기 때문에 IPC와 같이 어렵고 복잡한 통신을 할 필요가 없으며 전역 변수 공간 또는 동적으로 할당된 Heap 영역을 통해 데이터를 전달할 수 있습니다.

단점

공유 자원으로 인한 동기화 문제 발생 위험

서로 다른 스레드가 전역 변수 공간인 Data 영역, 동적 할당 공간인 Heap 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 자원 공유 문제가 발생할 수 있습니다.

교착상태(Deadlock)
세마포어와 뮤텍스

스레드간 오류 전파

여러 스레드가 프로세스 내부 자원을 공유하기 때문에 하나의 스레드에 문제가 발생하면, 해당 프로세스를 사용하는 다른 스레드도 영향을 받아 프로그램이 강제 종료될 수 있습니다.

이로 인해 주의 깊은 설계가 필요하며 디버깅이 까다롭습니다.

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

멀티 프로세스

멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 끼치지 않고 정상적으로 수행되는 안정적인 장점이 있습니다. 하지만 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하며, Context Switching시 여러 무거운 작업들이 동반되어 비용이 많이 소요되면서 응답 속도가 느려지는 단점이 존재합니다.

멀티 스레드

멀티 스레드는 멀티 프로세스보다 적은 메모리 공간, Context Switching시 비용이 덜 들어 응답 시간이 빠르다는 장점이 있습니다. 그러나 오류로 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 끼칠 수 있다는 단점과 프로세스 스택을 제외한 다른 자원들을 공유하므로 동기화 문제가 발생할 수 있습니다.

멀티 프로세스와 멀티 스레드 각각의 특성과 장단점이 있기 때문에 운영체제의 복잡성이나 프로그램의 특성 등을 고려해서 적합한 방식을 채택 적용해야합니다.

출처

0개의 댓글