본문 바로가기
CS

멀티 프로세스/멀티 스레드, 동시성/병렬성

by Hoody Coder 2024. 8. 5.

이제 멀티 프로세스와 멀티 스레드에 대해서 알아보자.
이 개념을 이해하기전에 알아야하는 것은 동시성과 병렬성이다.

 

동시성과 병렬성

https://parksunwoo.github.io/dev/2023/05/04/concurrency-handling-and-parallelism.html

동시성(concurrency) 병렬성(parallelisim)
단일 코어에서 여러개의 작업이 동시에 실행되고 있는것 처럼 번갈아가면서 작업 실제 여러개의 코어에서 물리적으로 동시에 작업
논리적인 개념으로 한번에 많은 것을 처리한다. 물리적인 개념으로 한번에 많은 일을 처리한다.

 

동시성은 여러개의 작업이 동시에 실행되는것 '처럼' 된다는것이 병렬성과의 차이점 이다.
아래 그림을 통해 이해해 보자.

https://joearms.github.io/published/2013-04-05-concurrent-and-parallel-programming.html

커피를 받기위해 여러사람이 대기하고 있다.
  동시성의 경우, 커피 머신 한 대가 두 줄의 손님을 번갈아 가며 커피를 만드는 상황으로 이해할 수 있다. 실제로 커피머신이 처리 가능한 손님은 한명이지만, 손님이 기다리는 동안 다른 줄에 있는 손님의 커피를 만드는 방식으로 진행된다. 이 과정이 빠르게 발생하기 때문에 여러 작업이 동시에 처리되는 것처럼 보이게 해준다(시분할 시스템(Time Sharing System)
  병렬성의 경우,
두 대의 커피 머신이 각각 한 줄의 손님을 처리하는 상황으로 볼 수 있다. 두 머신은 독립적으로 동시에 작동하여 더 많은 작업을 빠르게 처리할 수 있습니다.

이 개념을 먼저 말한 이유는 멀티프로세스는 동시성을 멀스레드는 병렬성을 활용하기 때문이다.

 

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

 

멀티프로세스

  멀티프로세스는 여러개의 독립적인 프로세스를 동시성을 활용하여 실행하는 것이다.  즉, 실제 CPU에서는 한번의 하나의 작업만 실행하지만, Context Switching을 통해 동시에 실행되는것 처럼 보이게 한다. 이 부분에 대해서도 더 자세히 쓰면 IPC기법, 스케줄링 등에 대한 개념이 선행되어야하는데 나중에 운영체제의 스케줄링 방식에 대한 게시글을 통해 작성해볼 예정이다. 

멀티 프로세스 내부를 보면, 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성하여 다중 프로세스로 이루어진 구조이다. 하나의 프로세스 실행되는 도중 새로운 프로세스를 만드는데 이를 부모 프로세스와 자식 프로세스로 구분한다. 부모 프로세스와 자식프로세스는 고유한 PID(Process ID)를 가지고 있다. 이를 통해 양자간의 통신을 가능하게 해준다. 다만 통신이 가능한 것이지 독립된 메모리 공간을 가지고 있기때문에 서로 다른 작업을 수행한다. 멀티프로세스로 얻을 수 있는 특징으로는

  • 각 프로세스가 독립적인 메모리 공간을 가지므로, 프로그램의 안정성을 얻을 수 있다.
  • 독립 적인 프로세스이므로 쉽게 시스템 규모를 확장할 수 있다.
  • Context Switching Overhead(컨텍스트 정환과정에서 오는 성능저하)가 발생 할 수있다.
  • 멀티스레드에 비해 많은 메모리공간을 차지한다.

 

멀티스레드

  멀티스레드는 하나의 프로세스 내부에 있는 여러개의 스레드가 동시에 실행되는 것이다. 이때는 병렬성을 활용한다. 
멀티스레드에서 항상 언급되는 것은 동기화 문제(Synchronization Issue) 이다.멀티스레드는 실행단계에서 어떤 순서로 스레드가 실행될지 알 수 없는 것이 특징중 하나 이다. 따라서 A 스레드로 어떤 자원을 사용하던 중, B 스레드로 제어권이 넘어간 후 B 스레드를 통해 해당 자원을 수정 한 후, A스레드로 제어권이 넘어간 경우 (A -> B -> A)  A 스레드가 해당 자원에 접근하지 못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다는 것이다.
이런 멀티스레드의 동기화 문제를 해결하기위한 방안으로는 뮤텍스(Mutex)와 세마포어(Semaphore)등의 방법이 존재한다.

  • 공유된 자원으로 통신 비용이 절감된다.
  • 메모리 사용이 효율적이다.
  • 컨텍스트 스위칭 비용이 적다.
  • 추가적으로 공유자원관리가 필요하다. (동기화 이슈)

'CS' 카테고리의 다른 글

프로세스, 스레드 (심화/면접 편)  (3) 2024.07.31
프로그램, 프로세스, 스레드 (개념편)  (0) 2024.03.30