본문 바로가기

Computer Science/Operating System

<운영체제> 멀티프로세스와 멀티스레드

1. 멀티프로세스

* 멀티프로세싱

 - 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것을 의미한다.

 - 각 프로세스들은 독립적으로 동작하며 자원이 서로 다르게 할당된다.

 

* 장점

 - 여러 자식 프로세스 중 하나에 문제가 발생하면, 다른 프로세스에 영향없이 그 프로세스만 죽는다. 따라서 안정적으로 프로그램을 운용할 수 있다.

 

 - 구현이 비교적 간단하다.

 

* 단점

 - 메모리 사용량이 많다.

 

 - 프로세스 간 공유를 하려면 통신을 해야하므로 까다롭다.

 

 - 스케줄링에 따른 Context Switching이 잦아 성능저하의 우려가 있다. 스위칭은 캐시 메모리 초기화 등 무거운 작업이 진행되므로 많은 시간을 낭비한다.

 

2. 멀티스레드

* 멀티스레딩

 - 최근에 가장 흔히 사용되는 병렬처리 프로그래밍 기법이다.

 

 - 하나의 응용프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리하도록 한다.

 

 - 많은 운영체제들이 멀티 프로세싱을 지원하지만 멀티 스레딩을 기본으로 한다.

 

* 장점

 - 스레드는 부모 프로세스의 자원과 메모리를 공유하므로 자원 공유가 쉽다. 스레드 간 데이터의 공유가 간단해지므로 처리량을 늘릴 수 있다. 스레드 사이의 작업량이 줄어들기 때문에 Context Switching도 빠르게 할 수 있다.

 

 - 프로세스를 할당하는 것에 비해 비용이 적다. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들기 때문에 자원을 효율적으로 관리할 수 있다.

 

* 단점

 - 너무 많은 스레드 사용은 오버헤드를 발생시킬 수 있다.

 

 - 단일 프로세스 시스템에서는 효과가 거의 없다.

 

 - 구현 및 테스트, 디버깅이 매우 어렵다.

 

 - 자식 스레드 중 하나에 문제가 생기면 전체 프로세스에 영향을 줄 수 있다.

 

3. 비교

 - 위에서 알 수 있듯 멀티 스레드가 멀티 프로세스에 비해 이점이 많다.

 

 - 먼저 자원의 효율성이 멀티스레드가 좋다. 프로세스를 생성하여 자원을 할당하는 비용이 줄어들고, 메모리 공유를 통해 데이터를 주고 받는 것이 간단해지기 때문이다.

 

 - 처리 비용 및 시간도 멀티스레드가 더 적다. 스레드는 Context Switching시 스택 영역만 처리하면 되기 때문에 훨씬 빠른 스위칭을 하게되고, 통신 비용도 적다.

 

 - 그러나 스레드는 동일한 공간을 공유하므로 안정성 문제는 피할 수 없다.

 

 - 참고로 멀티 스레딩을 지원하는 운영체제에서는 프로세스가 아닌 스레드 단위로 스케줄링을 하여 스레드에 CPU를 할당한다.

 

 

 


참고

 

 

Process와 Thread 이야기

프로세스(Process)

charlezz.medium.com

 

 

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io