본문 바로가기
Operation System

Process and Thread

by orioncsy 2023. 2. 19.

Process and Thread

개념

Program

  • 어떤 작업을 실행하기 위한 파일

Process

  • 연속적으로 실행되고 있는 프로그램
  • 운영체제로 부터 자원을 할당받아 실행하는 작업의 단위
    • CPU 시간, 주소 공간, code, data, stack, heap의 구조의 메모리 등을 할당받는다.
  • 프로세스 당 최소 1개 이상의 스레드를 할당받는다.
  • 각 프로세스는 다른 주소 공간에서 실행되고, 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  • 다른 프로세스에 접근하기 위해서는 프로세스 간 통신을 사용해야 한다.
    • 파이프, 파일, 소켓을 사용하여 통신

Thread

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스 내에서 각 thread는 stack만 할당받고 code, data, heap은 공유한다.

Java Thread

  • 일반적인 스레드와 거의 차이가 없고, jvm이 운영체제 역할을 한다.
  • 자바에서는 프로세스가 존재하지 않고 스레드만 존재하여 jvm에 의해 스케줄 되는 실행 단위 코드 블록이다.
  • 스레드 개수, 실행되는 스레드의 메모리 위치, 상태, 우선순위 등을 jvm에서 관리

멀티 프로세스와 멀티 스레드의 차이점

멀티 프로세스

  • 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 하나의 작업을 처리하는 방식
  • 장점
    • 하나의 프로세스가 문제가 발생해도 다른 프로세스에 영향을 주지 않아 프로그램 실행에 문제가 없다.
  • 단점
    • context switching
      • CPU에서 여러 프로세스를 돌아가며 작업을 하는데 다른 프로세스로 넘어가는 과정
      • 작동 중인 프로세스가 대기를 하면서 상태를 보관하고 다음 프로세스가 상태를 가져와 작업
    • context switching 과정의 오버헤드 발생
      • 프로세스는 각각 독립된 메모리를 할당받기 때문에 context switching 하면서 캐시에 있는 모든 데이터를 지우고 다시 불러와야 한다.
      • 프로세스 사이의 복잡한 통신기법(IPC)으로 오버헤드 발생

멀티 스레드

  • 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 하나의 작업을 처리하는 방식
  • 윈도우, 리눅스는 멀티 프로세싱을 지원하지만 멀티 스레딩을 기본으로 한다.
  • 웹 서버가 대표적인 멀티 스레드
  • 장점
    • 시스템 자원 소모 감소
      • 프로세스를 생성하는 데 사용하는 시스템 콜이 줄어 시스템 자원 절약
    • 스레드 사이의 작업량이 작아 context switching이 빠르다
    • 프로세스 내의 stack을 제외하고 메모리를 공유하여 통신에 대한 부담이 적다.
  • 단점
    • 설계를 깊게 고민해야 하고 디버깅이 까다롭다.
    • 단일 프로세스에서는 효과를 기대하기 어렵다.
    • 다른 프로세스에서 스레드를 제어할 수 없다.
    • 자원 공유 문제가 발생한다.(동기화 문제)
    • 하나의 스레드가 문제가 발생하면 프로세스 전체가 영향을 받는다.

Reference

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

'Operation System' 카테고리의 다른 글

Cache  (0) 2023.02.24
Virtual memory  (0) 2023.02.23
Semaphore & Mutex  (0) 2023.02.22
Deadlock & Starvation  (0) 2023.02.21
Sync & Async  (0) 2023.02.20