CS/OperatingSystem

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

whyWhale 2021. 4. 17.

멀티 프로세스


  • 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(테스크)을 처리하도록 하는 것.

 

  • 장점
    • 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 영향이 확산되지 않는다.
  • 단점
    • Context Swithching Overhead
      • 문맥 교환 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 큰 오버헤드가 발생.
      • 프로세스는 각각의 독립된 메모리 영역을 갖기 때문에 프로세스 사이에서 공유하는 메모리가 없다. 그리하여 문맥 교환이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 한다.
      • ※ Context Swithcing
        • CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정
        • 동작 중인 프로세스가 대기 하면서 해당 프로세스 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다
    • IPC 구현의 복잡성 
      • 독립된 영역을 할당받기 떄문에 하나의 프로그램에 속하는 프로세스들 사이에 변수를 공유할 수 없다.

 

멀티 스레드


  • 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.
  • 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만, 멀티스레딩을 기본으로 하고 있다.
  • 웹 서버가 대표적인 멀티 스레드 응용프로그램이다.

 

  • 장점
    • 시스템 자원 효율성
      • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능.
    • 시스템 처리량 증가
      • 스레드 간 데이터를 공유하는 것이 간단하여 시스템 자원 소모가 줄어들게 된다.
      • 스레드 사이에 작업량이 작아 문맥 교환이 빠르다.
    • 응답 시간 단축
      • 스레드는 stack영역을 제외한 모든 메모리를 공유하므로 통신 부담이 적다.
  • 단점
    • 동기화에 대한 주의 깊은 설계가 필요하다.(자원 공유의 문제)
      • 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
      • 동기화를 통해 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤하는 것이다.
      • 하지만 이로 인해 병목 현상이 발생하여 성능이 저하될 가능성이 높다.
      • 과도한 락으로 인한 병목 현상을 줄여야 한다.
    • 디버깅이 복잡하다.
    • 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 받는다.

 

 

※ 멀티 프로세스 대신 멀티 스레드를 사용하는 이유.

 

  • 멀티스레드는 프로그램을 여러가지 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이다.
  • 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 스레드로 나눠가면서 하는 이유
    • 자원의 효율성 증대
      • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리하기 때문에.
      • 프로세스 간 문맥교환시 CPU 레지스터 교체, RAM과 CPU사이 캐시 메모리에 대한 초기화까지 이루어 지므로 오버헤드가 크기 때문이다.
      • 스레드는 프로세스 내의 stack을 제외한 모든 영역을 공유하기 때문에 데이터를 주고받는 것이 간단해지고 공유자원을 사용하기 때문이다.
    • 처리 비용 감소 및 응답 시간 단축
      • IPC 통신보다 스레드 간 통신 비용이 적다.
        • stack영역을 제외한 모든 메모리를 공유하기 때문이다.
      • 문맥 교환의 속도가 멀티스레드가 더 가벼워 빠르다.
        • 문맥 교환 시 멀티스레드는 stack영역만 교체하면 된다.
  • ※ 주의할 점
    • 동기화를 꼭 신경 써야 한다.
    • 스레드 간 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 함께 상용할 때 충돌이 발생할 수 있다.

 

'CS > OperatingSystem' 카테고리의 다른 글

프로세스 동기화  (0) 2021.04.21
Blocking, Non-Blocking and Async  (0) 2021.04.21
스케줄러 알고리즘  (0) 2021.04.19
스케줄러  (0) 2021.04.17
프로세스와 스레드  (0) 2021.04.16

댓글