도당탕탕

Thread와 Process 본문

CS

Thread와 Process

backlo 2020. 1. 16. 01:05

INTRO

  1. Process 란?
  2. Thread 란?
  3. Multi Process vs Multi Thread

Process

  • 운영체제로부터 시스템 자원을 할당 받는 작업의 단위이다.
  • 쉽게 말해 실행된 프로그램을 의미한다.
  • 프로그램이란?
    • 명령어, 코드 및 정적인 데이터의 묶음 코드들의 집합
    • 어떤 작업을 위해 실행할 수 있는 파일을 의미
  • Code, Data, Stack, Heap의 구조로 이루어져 있다.
    • Code(Text): 프로그램의 코드
    • Data: 전역 변수
    • Heap: 동적으로 할당 되는 메모리
    • Stack: 매개변수, 지역 변수 등 임시적인 자료

Process의 특징

  • 기본적으로 한개의 프로세스당 최소 한개의 쓰레드를 가지고 있다.
  • 각 프로세스는 별도로 실행된다. 즉, 프로세스끼리 자원을 공유할 수 없다.
    • 즉, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
    • 한 프로세스가 다른 프로세스의 자원을 접근하려면 프로세스 간의 통신을 해야한다.
      • IPC: 파이프,파일,소켓 등 이것들을 이용해 통신하는 방법

Thread

  • 프로세스 내에서 여러개가 실행되는 흐름의 단위이다.
  • 프로세스의 특정한 수행 경로이다.
  • CPU이용의 기본단위 이다.

Thread의 특징

  • 하나의 프로세스 내에서 여러개의 쓰레드를 가질 수 있다.
  • 각각의 쓰레드는 별도의 Stack을 가진다.
  • 쓰레드는 하나의 프로세스에서 Code, Data, Heap영역을 공유한다.
  • 즉, 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스내의 주소 공간이나 자원들을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행된다.
  • Java Thread: 일반 쓰레드랑 거의 차이가 없다.

Multi Processing

  • 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 방법이다.

특징

  • 장점
    • 여러개의 자식 프로세스 중 하나가 문제가 생겨도 다른 프로세스에게 영향을 주지 않는다.
  • 단점
    • Context Switching 비용이 크다.
    • 프로세스 사이의 통신이(IPC) 어렵다.
  • Context Switching이란?
    • CPU에서 여러 프로세스를 돌아가면서 작업들을 처리하는데 이 과정을 Context Switching이라고 말한다.
    • 동작중에 있는 프로세스가 대기를 하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전의 보관했던 프로세스의 상태를 복구하는 작업을 말한다.
    • Multi Processing에서 Context Switching이 큰 이유는 이 과정에서 무거운 작업이 진행되 많은 작업 시간이 걸려 오버헤드가 크다.
    • 예를 들어 프로세스는 독립된 메모리 영역을 할당 받았기 때문에 프로세스 사이에서 공유하는 메모리 데이터가 없어 Context Switching이 발생하면 캐쉬에 있던 모든 데이터들을 초기화 하고 다시 캐쉬 정보를 불러와야 한다.

Multi Thread

  • 하나의 응용프로그램을 여러개의 쓰레드로 구성하고 그 쓰레드로 작업을 처리하도록 하는 방법이다.

특징

  • 장점
    • 프로세스의 자원을 공유하기 때문에 자원을 효율적으로 관리할 수 있다. (자원 할당을 하는 시스템 콜이 적음)
    • 쓰레드간 데이터를 주고 받는 것이 간단하다.
    • Context Switching 비용이 적다.
    • 응답 시간이 빠르다.
  • 단점
    • 단일 쓰레드일 경우 효과를 기대하기 어렵다.
    • 자원을 공유하는 만큼 충돌을 주의 해야한다.(Sync)
    • 다른 프로세스에서 쓰레드를 제어 할 수 없다.
    • 하나의 쓰레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

Multi Processing VS Multi Thread

  • 멀티 프로세싱 > 멀티 쓰래드
    • 프로그램을 여러개 키는 것이 유리할 경우 사용한다.
    • Google Chrome

chrome

  • 멀티 프로세싱 < 멀티 쓰레드
    • 하나의 프로그램안에서 여러 작업을 해결하는 것이 유리할 경우 사용한다.
    • Web Server
  • 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 쓰레드를 나눠가면서 하는 이유는?

  1. 자원의 효율성을 증대 - 멀티 프로세스를 실행되는 작업을 멀티 쓰레드로 할 경우 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어든다.
  2. 프로세스간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이 캐쉬 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크다.
  3. 쓰레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 쓰레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
  4. 처리 비용 감수 및 응답 시간 단축 - 프로세스 간의 통신 보다 쓰레드 간의 통신의 비용이 적어 작업들 간의 통신 부담이 줄어든다.
  5. 쓰레드는 Stack영역을 제외한 모든 메모리를 공유한다.
  6. 프로세스간의 전환 속도보다 쓰레드간의 전환 속도가 빠르다.
  7. Context Switching시 쓰레드는 Stack영역만 처리한다.
  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만 멀티 스레딩을 기본으로 하고 있다.

'CS' 카테고리의 다른 글

Sync와 Async 그리고 Blocking과 Non-Blocking  (0) 2020.01.16
Comments