목표
- 프로세스와 스레드 개념을 설명할 수 있다.
- 프로세스와 스레드의 차이를 설명할 수 있다.
- 멀티 프로세스보다 멀티 스레드를 사용하여야 하는 이유
프로그램(Program)이란?
- 소프트웨어 or 어플리케이션을 의미
- Ex) 웹브라우저, IntelliJ, Web Application 등
프로세스(Process) 란?
- 프로그램을 실행하여 메모리상에 올라간 것을 의미한다.
- 한개의 프로세는 다른 프로세스 직접 접근이 불가능하다.
스레드(Thread) 란?
- 프로세스가 일을 하기 위한 일개미 역할이다.
- stack 영역만 개인으로 쓰고, code, data, heap 영역은 공유한다.
멀티 프로세스
- 하나의 프로그램을 여러 프로세스로 실행하여 작업을 처리하게 하는것이다.
- 장점
- 한개의 프로세스가 문제가 난다고 하여 다른 프로세스에 영향이 없다.
- 단점
- 프로세스간 공유(메모리)에 불편함이 있다.
- Context switching 과정에서 캐쉬 메모리 초기화 후 다시 시스템콜을 하기 때문에 오버헤드가 심하다.
멀티 스레드
- 하나의 프로그램을 멀티 쓰레드를 구성하여 각 쓰레드별로 작업을 처리하게 하는것이다.
- 장점
- 스레드간 stack 영역을 제외한 모든 메모리를 공유하기 때문에 처리 비용이 줄어든다.
- 캐쉬 초기화가 없어 context switching 이 상대적으로 빠르다.
- 프로세스 생성시 소모되는 자원 소모를 줄일 수 있다.
- 단점
- 하나의 스레드에서 문제 발생시 전체 시스템 장애로 번질 수 있다.
- 공유 자원의 동기화 처리시에 개발자의 주의가 필요하다.
멀티 프로세스 보다 멀티 쓰레드를 권장하는 이유
- 자원의 효율성
- 멀티 프로세스에서 멀티 스레드로 프로그램을 변경시 context switching 으로 인한 시스템 콜이 줄어들기 때문에 자원 사용에 효율적이다.
- 처리 비용&속도 단축
- context switching 시 stack 영역만 처리하기 때문에 비용이 줄어든다.
- 스레드간에는 메모리를 공유하기 때문에 프로세스간 통신(IPC) 이 없기 때문에 비용 및 시간이 훨씬 단축된다.
추가 : JVM에서의 프로세스와 메모리
- Application 하나당(프로세스) JVM 하나를 할당받는다라고 생각하면 된다.
- 정확히는 JVM 하나 = Runtime Data Area 하나
- Java application 실행시 Class Loader 에 의해 class 파일들이 Method Area에 올려지고 함수 호출시 Execution Engine 이 바이트코드를 가져와 각 OS 의 Native code 로 컴파일하여 실행한다.