[운영체제] 멀티 프로세스(Multi-process)와 멀티 스레드(Multi-thread)

Yeoonnii·2023년 4월 9일
0

CS

목록 보기
4/4
post-thumbnail

소켓 통신시 클라이언트 연결이 들어왔을때 클라이언트가 연결을 끊기 전까지 리턴하지 못하는 경우, 이후에 들어오는 모든 클라이언트 요청이 대기열에 등록되어 기다리게 되는 문제가 발생할 수 있다.

이러한 방식은 동시에 여러 클라이언트의 요청을 처리할 수 없다는 문제가 있다.

위와 같은 요청 처리 방식의 한계를 해결하기 위해 대부분의 서버 프로그램은 멀티 프로세스 또는 멀티 스레드와 같은 병행처리 방식을 도입한다.



멀티 프로세스(Multi-process)

  • 멀티 프로세스 방식은 여러 개의 프로세스가 작업을 병렬처리 하는 것이다.
  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용.

장점

  • 독립된 구조이기 때문에 안정성이 높다.
  • 여러 프로세스가 같이 작업하고 있기 때문에 하나의 프로세스가 죽는다 해도 문제가 확산되지 않는다.(하지만 다른 프로세스의 일을 나누어 더 해야하기 때문에 느려질 수는 있다!)
  • 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴한 장점이 있다.

단점

  • 원본 프로세스의 메모리를 모두 복제하기 때문에 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지한다.
  • 독립된 메모리 영역이기 때문에 작업량이 많을 수록 (Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능 저하가 발생할 수 있다.

Context Switching이란?

CPU는 한 번에 하나의 프로세스만 실행 가능한데, CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정을 Context-Switching 이라 한다.


즉, 동작중인 프로세스가 대기하면서 해당 프로세스 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업이다.



스레드(Thread) 와 멀티 스레드(Multi-thread)

스레드(Thread)

  • 프로세스 내에서 실행되는 흐름의 단위이다.
  • 일반적으로 한 프로그램은 하나의 스레드를 가지고, 둘 이상의 스레드를 동시에 실행한다면 이를 멀티스레드(Multi-Thread)라 한다.


멀티 스레드(Multi-thread)

하나의 작업을 위해 하나의 프로세스에서 여러 스레드를 생성하여 자원을 공유하며 작업을 나누어 수행하는 것 이다.

멀티 스레드 방식은 클라이언트의 요청을 처리하는 일부 코드만 별도로 분리하여 실행하기 때문에 전체 메모리를 복제할 필요가 없어, 멀티 프로세스 방식보다 메모리 낭비가 적다.

서버에 멀티 스레드 방식을 적용하면 서버는 클라이언트와의 연결이 이루어지는 즉시 스레드를 생성하여 클라이언트의 요청처리를 맡긴다.

스레드는 독립적으로 수행되기 때문에 서버는 즉시 다른 클라이언트의 요청을 받을 수 있다.

이렇게 클라이언트마다 별도의 스레드를 생성하여 계산작업을 수행하면 동시에 여러 클라이언트의 요청을 병행으로 처리할 수 있다.


장점

  • 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원 소모가 감소하여 자원의 효율성이 증대한다.
  • 스레드 사이 작업량이 적어 Context Switching이 빠르다 (캐시 메모리를 비울 필요가 없음)
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다

단점

  • 자원을 공유하기에 동기화 문제가 발생할 수 있다 (병목현상, 데드락 등)
  • 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 끼친다


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

  • 멀티 스레드는 멀티 프로세스보다 작은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있다
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지하는 단점이 있다
  • 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다


0개의 댓글