Process vs Thread

2021. 5. 28. 19:12Study/CS

  • Program
    • 어떤 작업을 위해 실행할 수 있는 파일
  • Process
    • 컴퓨터에서 연속적으로 실행되고 있는 프로그램(어떤 작업을 위해 실행할 수 있는 파일)
    • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적)
    • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
      • 할당받는 자원
        • CPU 시간
        • 주소 공간
        • Code, Data, Stack, Heap 구조의 독립된 메모리 영역
    • 기본적으로 프로세스 당 최소 1개의 Thread를 가지고 있음. 이를 Main Thread라 한다.
    • 각각의 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
    • 다른 자원에 접근하기 위해서는 프로세스 간 통신을 사용해야 한다.
  • Thread
    • Process에서 할당받은 자원을 이용하는 실행 흐름의 단위
    • Process의 특정한 수행 경로
    • Thread는 Process 내에서 각각 Stack만을 할당받고 Code, Data, Heap을 공유한다.
      • Stack을 Thread마다 독립적으로 할당하는 이유는?
        • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 Thread의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.
    • 공유되는 자원들은 같은 프로세스 내에 Thread 끼리 공유하게 된다.
    • 각각의 Thread는 별도의 레지스터와 Stack을 가지고 있지만, Heap은 서로 읽고 쓸 수 있다.

 

 

  • Multi Process
    • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
    • 장점
      • 여러 개의 프로세스 중 하나에 문제가 발생하면 자식 프로세스 외의 프로세스는 영향을 받지 않는다.
    • 단점
      • Context Switching Overhead
        • Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되면서            Overhead 발생
        • 프로세스는 독립적인 메모리 영역을 할당받았기 때문에 Context Switching이 일어나면 캐쉬에 있는 데이터를 리셋하고 다시 정보를 불러와야 한다.

 

 

  •  Multi Thread
    • 하나의 프로그램을 여러 개의 Thread로 구성하고 각각의 Thread가 하나의 작업을 처리하도록 하는 것
    • ex) 웹 서버
    • 장점
      • 자원 효율성 
        • 프로세스의 생성을 최소화하여 자원할당을 최소화한다.
      • 처리 비용 감소
        • 시스템 자원 소모가 줄어든다
        • Thread 간의 작업량이 적어 Context Switching이 빠르다
    • 단점
      • 설계가 중요하다
      • 디버깅이 어렵다
      • 다른 프로세스에서 Thread를 제어할 수 없다.
      • 자원 공유의 문제
      • 하나의 Thread에서 문제가 발생하면 Process가 영향을 받는다.

 

 

 

  • 결론
    • Multi Process < Multi Thread
      • < 자원의 효율성
      • < 오버헤드 
      • < 시스템 자원 소모
      • < 처리 시간 및 비용
      • > 동기화 문제
    • Program(Disk,Static) -> Process(Memory,Dynamic) -> Thread
  • 추가
    • CPU입장에서 최소 작업 단위는 Thread다
    • OS입장에서 최소 작업 단위는 Process다

 

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

Array vs List  (0) 2021.05.30
프로세스 동기화  (0) 2021.05.29
Scheduler / Scheduling  (0) 2021.05.29
DeadLock  (0) 2021.05.28
Transaction  (0) 2021.05.28