Multi Process & Multi Thread

  • update date : 2023.10.09

Introduction

프로세스는 실행 중인 프로그램을, 쓰레드는 프로세스 내부에서 CPU에 작업을 요청하는 실행의 단위를 말한다.

어떤 커다란 작업이 있다고 할 때, 전체 작업을 여러 개의 서브 작업으로 쪼개고 이를 여러 명이 함께 처리할 수 있다면 보다 빠르게 작업을 완료할 수 있을 것이다. 멀티 프로세싱과 멀티 쓰레딩은 이와 같이 여러 명이 함께 작업을 처리할 수 있도록 만드는 방법이다.

Multi Processing & Multi Threading

멀티 프로세싱은 한다는 것은 여러 개의 프로세스를 생성하고 이들과 작업을 나누어 수행하는 방법이다. 이때 새롭게 프로세스를 생성할 때에는 fork() 시스템 호출을 통해 부모 프로세스를 복제하는 방식으로 이뤄진다.

반면 멀티 쓰레딩은 하나의 프로세스 내에서 실행 단위를 여러 개로 쪼개어 작업을 나누어 수행하는 방법이다. 운영체제의 입장에서 본다면 하나의 프로세스라는 점에서 동일하며, 각 쓰레드는 다른 쓰레드와 프로세스의 자원들을 공유하게 된다.

이러한 동작 방식의 차이는 멀티 프로세싱과 멀티 쓰레딩의 장단점으로 이어진다. 먼저 멀티 프로세싱에서는 각각의 프로세스가 독립적인 메모리 공간을 가져 메모리 공유로 인한 문제에서 자유롭다. 멀티 쓰레딩은 프로세스의 메모리 공간 중 스택은 개별적으로 가지더라도 코드, 데이터, 힙 영역은 공유하게 되므로 동기화에 따른 문제가 발생할 수 있다.

또한 개별 프로세스는 독립적으로 동작하므로 멀티 프로세싱에서는 한 프로세스에서 발생한 문제가 다른 프로세스로 전이되지 않는다. 따라서 안정적이다. 이에 반해 멀티 쓰레딩은 모든 쓰레드가 동일한 프로세스에서 동작한다는 점에서 한 쓰레드에서 발생한 문제가 전체 프로세스를 망가뜨릴 위험이 있다.

지금까지 멀티 프로세싱의 장점을 주로 보았다면 단점도 살펴보자. 첫 번째 단점은 fork()로 프로세스를 복제하게 되면 PCB(Process Control Block)가 새롭게 생성되고, 정적 메모리 영역이 일부 복제되기 때문에 그 과정이 상대적으로 무겁고, 메모리 공간에 중복이 발생한다는 점이다. 반면 멀티 쓰레딩은 프로세스 관련 자원을 새로 만들지도 않고, 일부 메모리 영역을 공유하기 때문에 메모리 효율적이다.

Context Switching의 관점에서도 프로세스 간 Context Switching 이 일어나는 경우 프로세스 관련 정보도 모두 변경해주어야 하지만, 쓰레드 간 Context Switching은 실행과 관련된 요소(stack ptr 등)만 변경해주면 되기 때문에 더욱 가볍다.

Summary

멀티 프로세싱과 멀티 쓰레딩 모두 전체 작업을 여러 명의 작업자가 나누어 처리하도록 하여 CPU Utilization과 처리 속도를 높이는 방법이다.

  멀티 프로세싱 멀티 쓰레딩
프로세스 갯수 복수의 프로세스 생성 단일 프로세스 내 복수의 쓰레드 생성
동기화 문제 👍 👎
안정성 👍 👎
메모리 효율성 👎 👍
Context Switching Overhead 👎 👍