[CS]멀티프로세스와 멀티스레드

Hyunwoo·2025년 8월 14일

CS

목록 보기
1/1

프로세스와 스레드의 정의

프로세스란?

  • 실행중인 프로그램의 인스턴스
  • 운영체제에서 프로그램을 실행하는 작업 단위
  • "정적"인 프로그램이 "동적"으로 변하여 돌작아가는 상태

스레드란?

  • 프로세스 내부에서 실행되는 작업의 흐름
  • 프로세스의 자원을 공유하며 프로세스 내부에서 처리해야할 실제 작업 단위
  • 하나의 프로세스는 최소 하나의 스레드를 가짐

정리하면 프로세스는 실행 중인 프로그램 단위이고, 스레드는 해당 프로그램 내부에서 실제로 실행되는 작업 단위이다.


멀티프로세스와 멀티스레드의 정의

멀티프로세스

  • 두 개 이상의 프로세스가 동시에 실행되는 것(동시성, 병렬성)
  • 하나의 작업을 여러 개의 프로세스로 나누어 처리하는 방식
  • 하나의 프로세스가 죽어도 다른 프로세스의 영향을 주지 않음
  • 독립된 실행 흐름을 보유
  • 안정적으로 프로그램을 실행할 수 있다는 장점이 있지만, 그만큼 메모리와 자원이 소모됨

동시성은 CPU 코어가 한 개일 때, 여러 프로세스를 짧은 시간동안 번갈아 가면서 연산을 하게 되는 시분할 시스템으로 실행되는 것이다.
병렬성은 CPU 코어가 여러개일 때, 각각의 코어가 각각의 프로세스를 연산함으로써 프로세스가 동시에 실행되는 것이다.

CPU는 한번에 하나의 작업만 처리할 수 있다.
따라서 멀티프로세스를 위해서는 처리 중인 프로세스를 교체하는 context switching이 필요하다.
이 과정에서 기존에 처리하던 프로세스가 할당받은 메모리 영역을 다른 프로세스가 사용할 수 있게 교체하기 위한 오버헤드가 필요하다.

프로세스 간 자원 공유를 위해서는 IPC(Inter Process Communication)이 필요하다.
예를 들면 다음과 같은 방식이 있다.

  • Pipe
  • Message Queue
  • Shared Memory

멀티스레드

  • 하나의 프로세스 안에서 여러 개의 스레드를 만들어 동시에 작업을 처리하는 방식
  • 스레드는 힙, 데이터, 코드 영역을 공유하고 각 스레드마다 고유의 스택 영역을 가지고 있음
  • 따라서 자원(메모리 공간)을 공유하기 때문에 데이터 접근이 빠르고, Context Switching 비용이 낮음
  • 멀티프로세스와 다르게, 하나의 스레드에서 문제가 발생하면 다른 스레드들도 영향을 받을 수 있음
  • IPC가 불필요

    다만, 같은 메모리에 여러 스레드가 접근하기 때문에 **동기화 문제**가 발생한다. 따라서, Mutex, Semaphore, Lock과 같은 동기화 기법이 필요하다.

0개의 댓글