프로세스와 스레드의 차이

딩딩당당·2023년 2월 24일
0

프로세스란?

  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • 단순히 말해 실행된 프로그램을 의미한다.

프로세스의 특징

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.
  • 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  • 한 프로세스가 다른 프로레스의 자원에 접근하려면 프로세스 간의 통신을 해야한다.

스레드란?

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스의 특정한 수행 경로
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위

스레드의 특징
스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.

  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

JAVA에서의 스레드

일반 스레드와 차이가 거의 없지만 자바에서는 프로세스가 따로 존재하지 않고 스레드만 존재한다. JVM에 의해 스케줄되며 실행 단위 코드 블록이라고 생각할 수 있다.

  • 즉, 개발자는 자바 스레드로 작동할 스레드 코드를 작성하고, 스레드 코드가 생명을 가지고 실행을 시작하도록 JVM에 요청하는 일 뿐이다.

멀티 프로세스와 멀티 스레드

  • 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 빠르다는 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험이 있다.
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지한다.
  • 두 방법은 여러 작업을 수행하는 점에서 동일하지만, 장단점이 존재하여 적합한 동작 방식을 선택해서 적용해야한다.

1.멀티 프로세스

  • 두개 이상의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리하는 것(병렬처리)
  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용된다.

장점

  • 독립된 구조로 안전성이 높다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않기 때문에 느려질 수는 있지만 정지되는 치명적인 문제는 피할 수 있다.
  • 여러개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서가 이를 공유하면 비용적으로 저렴하다.

문제점

  • 독립된 메모리 영역이기 때문에 작업량이 많을수록( Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능저하가 발생 할 수 있다.
  • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.

Context SwitchingPermalink

  • CPU는 한번에 하나의 프로세스만 실행 가능하다.
  • CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching라 한다.
  • 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

2. 멀티 스레드

하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.

장점

  • 시스템 자원소모 감소 (자원의 효율성 증대)
  1. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
  • 시스템 처리율 향상 (처리비용 감소)
  1. 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
  2. 스레드 사이 작업량이 작아 Context Switching이 빠르다. (캐시 메모리를 비울 필요가 없다.)
  • 간단한 통신 방법으로 프로그램 응답시간 단축
  1. 스레드는 프로세스 내 스택영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다.
  2. 힙 영역을 공유하므로 데이터를 주고 받을 수 있다.

멀티 스레드를 사용하는 이유

운영체제가 시스템 자원을 효율적으로 관리하기 위함이며, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다.

무조건 멀티 스레드가 좋지는 않다

  • 스레드를 활용하면 자원의 효율성이 증가하는건 사실이지만, 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제가 발생할 수 있다.
profile
자바공부해요흑흑

0개의 댓글