[Java] 멀티 프로세싱과 멀티 스레딩

NNIJGNUS·2024년 7월 4일

Java

목록 보기
3/4

Concurrent Programming

  • 같은 종류의 작업이 가능한 많이 동시에 일어나는 것을 추구
  • 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 하는 것

자바는 멀티 프로세싱과 멀티 스레딩 Concurrent Programming을 지원한다.

멀티 프로세스

개념

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

멀티 프로세스와 멀티 프로세서?

  • 프로세스는 프로그램의 실행 상태를, 프로세서는 CPU 코어를 의미.
  • 멀티 프로세스는 하나의 프로그램에서 여러 개의 프로세스를 실행하는 것을 의미
  • 멀티 프로세서는 여러 개의 CPU 코어가 하나의 시스템에서 동시에 실행되는 것을 의미

장점

독립된 구조로 안전성이 높다.

프로세스는 서로 다른 주소 공간을 갖는 상호 독립된 구조를 갖는다. 즉 하나의 프로세스에서 발생한 문제가 다른 프로세스에도 문제를 일으킬 가능성이 적다.

시스템 확장성이 뛰어나다.

각 프로세는 독립적이므로, 새로운 기능이나 모듈을 추가하거나 수정할 때 다른 프로세스에 영향을 주지 않는다.

문제점

오버헤드

전술하였듯 프로세스는 상호 독립된 구조를 갖는다. 따라서 Context Switching이 발생하였을 때 캐시 메모리 초기화 등 작업이 진행될 때 오버헤드가 발생한다.

자원 공유 비효율성

프로세스는 독립적인 메모리 주소 공간을 가지므로 메모리 사용량이 증가된다. 프로세스간 통신(IPC, Inter-Process Communication)이 필요한 경우, 오버헤드가 발생한다.

멀티 스레딩

개념

하나의 프로세스의 여러 스레드로 자원을 공유하며 작업을 나누어 수행

장점

시스템 자원 효율성 증대

프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.

시스템 처리율 향상

IPC에 비해 스레드 간 통신이 간단하고 시스템 자원 소모가 적다. 또한 스레드는 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하므로 Context Switching이 빠르다.

통신 비용이 적음

스레드는 프로세스 내의 힙 영역을 공유하므로 스레드 간 통신이 간단하다.

문제점

동기화 문제

스레드는 프로세스 내의 자원을 공유하므로 병목현상, 데드락 등 동기화 문제가 발생할 수 있다.

디버깅 어려움

여러 개의 스레드가 병렬적으로 실행되기 때문에, 각 스레드의 동작을 추적하기 어려울 수 있음.

스레드간 영향

하나의 스레드에 문제가 생기면 전체 프로세스까지 영향이 미칠 수 있다.

결론

  • 멀티 프로세싱은 안정적이지만 오버헤드로 인해 성능이 떨어질 우려가 있다.
  • 멀티 스레딩은 자원 공유와 Context Switching에 큰 이점이 있지만 안정성이 떨어진다.

0개의 댓글