Process(프로세스)와 Thread(쓰레드)의 개념 & 차이

    출처:https://www.javamex.com/tutorials/threads/how_threads_work.shtml

     

    Process (프로세스)

    의미

    • Program이 실행 후 작동하고 있는 상태일 때, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 Program
    • Program을 실행하면 OS가 메모리 등 필요한 자원을 할당해주어 "Process"가 된다
      • 할당받는 System resource의 예
        • 독립된 메모리 영역 - Code, Data, Stack, Hack 구조
        • 운영에 필요한 주소 영역
        • CPU 시간
    • Windows 작업관리창에 표시되어 있는 Program들 (실행 중)

    특징

    • 독립된 메모리 영역 할당 - Code, Data, Stack, Hack 구조
    • 각 Process 는 별도의 주소 영역에서 실행되며, 독자적인 메모리 영역을 갖기 때문에 Process 간 메모리 영역의 공유는 불가
    • 다른 Process 의 자원에 접근하려면 IPC (Inter-Process Communication) 을 사용해야 함
    • Process 는 최소 1개의 Thread 를 포함하고 있다

    Multi Processing

    의미

    • 하나의 Program 을 여러 개의 Process 로 구성하여 각 Process 가 하나의 작업(Task)을 처리하도록 하는 것

    특징

    • 여러 Process 들을 한 꺼번에 동작시키는 작업은 동시성, 병렬성, 그리고 혼합을 통해 이뤄진다 
    • Concurrency (동시성)
      • Processor (CPU) 하나가 여러 프로그램들의 여러 작업을 돌아가며 일부분씩 수행하는 방식
      • Processor 는 한 번에 하나의 Process 만 실행시킬 수 있기 때문에 동시성을 통해 여러 작업을 동시에 수행하는 것처럼 동작하게 한다
        이때, 진행 중인 작업을 바꾸는 것을 'Context Switching'이라 하며, 이 과정은 매우 빠르게 진행되므로 사람들은 여러 Process 들이 동시에 진행되는 것처럼 느낀다
    • Parallelism (병렬성)
      • Processor 하나에 여러 개의 Core (Multi-core) 있어 각 Core 들이 각기 다른 작업을 동시에 수행하는 방식이다
      • Dual, Quad, Octa Core 와 같은 Multi-core 를 탑재한 PC 에서 가능한 방식

    장점

    • 여러 자식 Process 중 하나에 문제가 발생해도 그 자식 Process 가 죽는 것 외에 영향을 끼치지 않는다

    단점

    • 각 Process 는 별도의 주소 영역에서 실행되며, 독자적인 메모리 영역을 갖기 때문에 Process 간 메모리 영역의 공유는 불가
      • 하나의 Program 에 속하는 Process 라도 변수를 공유할 수 없다 
      • Process 간 통신을 위해 IPC (Inter-Process Communication) 필요 
      • Process 간 공유하는 메모리가 없어 Context Switching 가 발생하면 캐시 메모리의 모든 데이터를 리셋하고 다시 불러와야 한다
      • Context Switching 과정에서 캐시 메모리 초기화와 같은 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드 발생



    Thread (쓰레드)

    의미

    • Process 가 할당 받은 자원을 이용하는 실행 단위
    • Process 의 특정한 수행 경로이자 Process 내에서 실행되는 여러 흐름의 단위
      • Process 는 최소 1개의 Thread 를 갖는데 이를 Main Thread 라 한다
      • Thread 들이 모여 하나의 Process 를 구성한다

     

    특징

    • 각 Thread 는 독자적인 Stack 메모리를 갖는다
    • Thread 는 Process 내에서 Code, Data, Heap 영역을 공유한다
      • 각 Thread 는 별도의 레지스터와 Stack 을 갖고 있지만, Heap 메모리는 서로 읽고 쓸 수 있다
      • 한 Thread 가 Process 자원을 변경하면, 다른 이웃 Thread (sibling thread)도 그 변경 결과를 즉시 볼 수 있다
      • 메모리의 공유 때문에 동기화, 데드락 등의 문제가 발생할 수 있다
    • Thread 는 대부분의 현대 OS 가 지원하고 있으며, 이와 관련된 주요 라이브러리는 POSIX Pthreads, Windows threads, Java threads 가 있다

    Multi Thread

    의미

    • 하나의 응용 Program 을 여러 개의 Thread 로 구성하고 각 Thread 로 하여금 하나의 작업을 처리하도록 하는 것
    • 윈도우, 리눅스 등 많은 OS 들이 Multi Processing 을 지원하고 있지만 Multi Threading을 기본으로 하고 있다
      • 대표적인 멀티 스레드 응용 Program 은 웹 서버가 있다

    장점

    • 시스템 자원의 효율성
      • Process 를 생성해 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다
      • Thread 간 Data 를 주고 받는 것이 비교적 간단해 시스템 자원의 소모가 줄어든다
      • Thread 간 작업량이 작아 Context Switching 이 빠르다
      • 통신 방법이 간단해 Program 응답 시간 단축
        • Thread 는 Process 내의 Stack 영역 외의 모든 메모리를 공유해 통신의 부담이 적다

    단점

    • 설계와 디버깅이 까다롭다
    • 단일 Process 시스템의 경우 효과가 크지 않다
    • 다른 Process 간에는 Thread 를 제어할 수 없다
    • Multi Thread 의 경우 동기화, 데드락 등의 문제가 발생할 수 있다
      • 하나의 Thread 에서 문제가 발생하면 전체 Process 에 영향을 준다

    차이점

     

    Process 와 Thread

    관계

    Process 는 Thread 의 컨테이너이다
    즉, Process 는 Thread 에 필요한 자원과 정보를 제공하고 Thread 의 정보를 담고 있다

    차이점

    차이 Process Thread
    정의 실행 중인 Program Process 의 기본 실행 단위
    생성/종료 시간 많은 시간 소요 적은 시간 소요
    Context Switching 많은 시간 소요 많은 시간 소요
    상호 통신 IPC 공유 메모리
    자원 소모 많음 적음
    독립성 각각 독립적 Stack 만 독립적

    Multi Proecss 와 Multi Thread

    Multi Process 보다 Multi Thread 를 사용하는 이유는?

    여러 프로그램을 실행하는 것보다 하나의 프로그램에서 여러 작업을 수행하는 것이 효율적이다

    자원의 효율성 증대

    - Multi Process 로 실행되는 작업을 Multi Thread 로 실행할 경우, Process 를 생성해 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다
    - Thread 는 Process 내의 메모리를 공유하기 때문에 독립적인 Process 와 달리 Thread 간 Data 를 주고 받는 것이 간단해 시스템 자원의 모소가 줄어든다

    처리비용 감소 및 응답시간 단축
    - Process 간 통신인 IPC 보다 Thread 간 통신의 비용이 적어 작업 간의 통신 부담이 줄어든다
    - Thread 는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 Process 간의 전환 속도보다 Thread 간의 전환 속도가 빠르다. (Context Swtiching 시 Thread 는 Stack 영역만 처리하기 때문이다)

    추가

    Program (프로그램)

    의미

    • 어떤 작업을 하기 위해 할 일들을 순서대로 나열한 것
    • Ex) 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 '정적인 상태'의 파일 (.exe)
      • 프로그램에 필요한 데이터를 묶어 놓은 파일로 보조 기억장치에 저장된다.

    참고

    https://velog.io/@gparkkii/ProgramProcessThread

    https://cocoon1787.tistory.com/688

    https://haedallog.tistory.com/138

    https://gbsb.tistory.com/312

     

    '개발자라면? > OS 개념' 카테고리의 다른 글

    Context Switching 이란?  (0) 2022.09.19

    댓글

    Designed by JB FACTORY