[CS] 프로세스와 스레드 정리

김의진·2021년 12월 16일
0


이미지 출처 - https://theheydaze.tistory.com/568

프로세스(Process)란?

  • 메모리에 올라와 실행되고 있는 독립적인 개체
  • 운영체제로부터 시스템 자원을 할당받은 작업의 단위
  • 프로그램을 실행할 수 있는 인스턴스

특징

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다.
  • 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 각각의 프로세스는 다른 프로세스에 접근 할 수 없다.

스레드(Thread)란?

  • 프로세스 내에서 실행되는 작업의 단위
  • 프로세스가 할당받은 자원을 이용하는 작업의 단위

특징

  • 스레드는 프로세스 내에서 각각 Stack만 할당받으며 프로세스의 Code, Data, Heap 메모리 영역은 공유한다.(위 그림 참조)
  • 스레드는 하나의 프로레스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 동일 한 프로세스의 스레드끼리 공유한다.
  • 같은 프로세스 내에 있는 여러 스레드는 같은 힙 공간을 공유한다. (프로세스는 다른 프로세스의 메모리 접근할 수 없다.)

자바스레드(Java Thread)란?

  • 자바스레드 또한 일반 스레드와 거의 차이가 없다. 다만 자바에서는 JVM이 운영체제의 역할을 한다.
  • 자바에는 프로세스가 존재하지 않고 스레드만 존재, 자바 스레드는 JVM에 의해 스케쥴되는 실행 단위 코드 블록이다.
  • 자바에서 스레드 스케줄링은 전적으로 JVM에 의해 이루어진다.
  • 개발자는 JVM위에서 작동할 스레드 코드를 작성하고, 스레드 코드가 동작할 수 있도록 JVM에 요청하게 된다.
    (Java Application의 main() 메서드가 메인스레드 역할을 한다.)

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

멀티 프로세스

  • 멀티 프로세싱(병렬 프로세스)이란 하나의 응용 프로그램을 여러 개의 프로세스가 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
  • 두개 이상의 프로세스(CPU)가 협력하여 하나 이상의 작업(Task)를 동시에 처리하는 것.
  • 여러 개의 자식 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향이 가지 않는다.
  • Context Switching에서의 오버헤드가 발생될 수 있다.
  • 프로세스 간의 복잡한 통신(IPC)가 필요하다.

Context Switching이란?

  • 멀티 프로세스가 동작하기 위해서 CPU가 여러 프로세스를 돌아가면서 작업을 처리하게 된다. 이 과정을 Context Switching이라 한다.
  • 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말한다.
  • Context Switching은 매우 빠른 속도로 진행되기 때문에 (여러 Task를 오고가며 작업을 처리함 ) 실시간처럼 보이게 되는 장점이 있다.
  • 즉, 하나의 Task가 끝나기 까지 기다리게 된다면 자원이 비효율적으로 사용되게 된다. 이를 방지하기 위해 Context Switching이 사용된다.
  • Context Switching은 일반적으로 프로세스가 스레드보다 더 많은 비용이 든다. 스레드의 경우 Stack을 제외한 모든 메모리를 공유하지만 프로세스의 경우 각각의 프로세스가 독립적이기 때문이다.

멀티 스레드

  • 멀티 스레드란 하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다.
  • 스레드는 하나의 프로세스에서 자원을 공유하기 때문에 '자원 공유의 문제'가 발생할 수 있다.
  • 하나의 스레드 장애로 전체 스레드가 종료 될 위험이 있다.

멀티 프로세스 대신 멀티 스레드의 효율이 좋은 이유?

  • 프로세스 간의 Context Switching은 CPU 레지스터 교체 뿐 아니라 RAM, CPU사이의 캐시 메모리 데이터까지 초기화해야하며 이는 오버헤드로 이해지게 된다. 반면 스레드는 프로세스 내의 메모리를 공유하기 때문에 프로세스 보다 상대적으로 간단하고 시스템 자원소모가 적다.
profile
3년차 Spring, Java 주니어 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보