프로세스(Process) vs 스레드(Thread)

Jihun Kim·2021년 10월 13일
0

운영체제 (OS)

목록 보기
1/1

Process란?

  • 운영체제 위해서 실행중인 Program을 말한다.
  • 프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 대기중인 상태이다.
  • 크게 4개의 메모리 영역을 가지고 있다.
    • Stack : 매개변수, 지역변수 등 일시적인 데이터
    • Heap : 동적으로 할당되는 메모리 : 예) 자바의 new Object(), C언어의 malloc()
    • Data : 전역 변수 : 예) static 변수, global 변수
    • Text(Code) : 실행 명령을 하는 Program의 코드들

Thread란?

  • 프로세스 내에서 실행되는 흐름의 단위이다.
  • CPU 이동의 기본 단위
  • 프로세스 내에서 각각 Stack만 따로 할당 받고, Text, Data, Heap 영역은 프로세스와 공유한다.
  • 각 Thread는 별도의 Stack 영역을 가진다.

Multi Thread (멀티 스레드)

  • 프로세스의 자원을 공유
  • 향상된 응답성
  • Context switching 비용이 적음
  • 자원을 공유하는 만큼 충돌을 주의 (Thread-safe 하게)
  • 예 ) Web Server

멀티 스레드 주의점

  • 한 프로세스 안의 스레드에 문제가 생기면 같은 프로세스 안의 스레드도 같이 문제가 생긴다.
  • 따라서 같은 데이터를 공유하기 때문에, 데이터 동기화에 신경써야 한다.

Multi Process (멀티 프로세스)

  • 하나의 작업을 여러 개의 프로세스가 처리하는 것을 말한다.
  • 프로세스가 통신 (IPC, Interprocess communication)
  • Context Switching 비용이 큼
  • 자식 프로세스 중 하나가 문제가 생겨도 다른 프로세스에 영향이 없다.
  • 예 ) google chrome

멀티 프로세스로 처리 가능 한 것을 멀티 스레드를 같이 사용하는 이유

  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로서, 자원의 효율적 관리가 가능하다.
  • 프로세스 간의 통신 (IPC)보다 스레드 간의 통신 비용이 적어 작업들 간 부담이 감소한다.
  • 대신, 멀티 스레드를 사용할 때는 공유 자원으로 인한 문제 해결을 위해 동기화에 신경써야 한다.

프로세스와 스레드 차이 정리

  • 프로세스는 메모리 상에서 실행중인 프로그램, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
  • 프로세스마다 최소 하나의 스레드를 가지고 있다. 그리고 각각 별도의 주소공간을 독립적으로 할당받는다.
  • 각 메모리 영역은 code, data, heap, stack 영역으로 나뉜다.
    • code(text) 영역 : Program의 코드
    • data 영역 : 전역 변수 예) static 변수, global 변수
    • heap 영역 : 동적으로 할당되는 메모리 예) new Object(), malloc()
    • stack 영역 : 매개변수, 지역변수 등 임시 자료들
    • 스레드는 이 중에 stack만 따로 할당 받고 나머지 영역은 스레드끼리 서로 공유한다.
  • 결론:
    - 프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용
    • 스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용
profile
backend studying

0개의 댓글