[Java]멀티프로세스와 멀티스레드

Wintering·2022년 5월 22일
0

이펙티브 자바

목록 보기
7/18

프로세스와 스레드

프로세스(Process)

운영체제로부터 자원을 할당받는 작업의 단위
사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것을 프로세스라고 부른다.

  • 프로세스 : 실행중인 하나의 애플리케이션
    ex) Chrome 브라우저를 2개 실행시켰다.
    = 두 개의 Chrome 프로세스가 생성 되었다.

멀티 태스킹 (Multi Tasking) : 두 가지 이상의 작업을 동시에 하는 것
Multi Tasking != Multi Processing

한 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션들도 존재
ex. Windows media player
: 미디어 플레이어를 실행시키면, 동영상 재생 + 음악 재생 두가지의 작업을 동시에 처리
이를 가능하게 하는 것이 Multi Thread

스레드(Thread)

프로세스가 할당받는 자원을 이용하는 실행의 단위

  • 프로세스 내의 명령어 블록으로 시작점과 종료점을 가진다.
  • 실행중에 멈출 수 있으며 동시에 수행 가능하다.
  • 어떠한 프로그램 내에서 특히 프로세스 내에서 실행되는 흐름의 단위

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

멀티 프로세스 : 독립적으로 프로그램을 실행하고, 여러가지 작업을 처리

✅ 장점

  • 독립된 구조로 안정성이 높다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업 속도가 느려지는 정도의 손해에 그친다.
  • 여러개의 프로세스가 처리되어야 할 때, 동일한 데이터를 사용하고 이러한 데이터를 하나의 디스크에 두고 모든 프로세스가 이를 공유하면 비용적으로 저렴하다.

⛔단점

  • 독립된 메모리 영역이기 때문에, 작업량이 많을 경우 오버헤드가 발생해 성능저하가 발생 할 수 있다.
  • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되괴 시간이 소모되는 등 오버헤드가 발생한다.

멀티 스레드 : 한 개의 프로그램을 실행하고, 내부적으로 여러가지 작업을 처리

✅ 장점

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

⛔ 단점

  • 자원을 공유하기에 동기화 문제가 발생할 수 있다. (병목현상, 데드락)
    -주의 깊은 설계가 필요하고 디버깅이 어렵다.
    (불필요한 부분까지 동기화하면, 대기시간으로 인해 성능저하 발생)
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.

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

  • 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지한다.
    Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.
    : 멀티 프로세스는 운영체제에서 할당받은 '자신의 메모리'를 갖고 실행하기 때문에 서로 독립적 /멀티 스레드는 하나의 프로세스 내부에서 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있어, 다른 스레드에 영향을 미친다. = 멀티 스레드는 예외처리가 매우 중요

🔻출처

0개의 댓글