Program
- 어떤 작업을 위해 실행할 수 있는 파일
Process
- 컴퓨터에서 연속적으로 실행되는 컴퓨터 프로그램
- 메모리에 적재되어 실행되는 프로그램 인스턴스
- 운영체제로부터 자원을 할당 받는 작업 단위
특징
- process당 최소 1개의 thread를 가짐
- process는 별도의 주소 공간에서 실행
- 다른 process의 변수나 자료에 접근할 수 없음
- 다른 process접근하려면 프로세스 간 통신(IPC, Inter-process communication)을 사용해야함
Thread
- 프로세스 내에서 실행되는 흐름의 단위
- 프로세스가 할당받은 자원을 이용
특징
- process내에서 각각 stack만 할당받고, code, data, heap은 공유
- process내에서 thread간 heap자원 공유
Java thread
- 일반 thread와 차이가 없으며 JVM이 운영체제 역할
- JVM에 의해 스케쥴되는 실행단위
Thread lifecycle
lifecycle | desc |
---|
new | 스레드 객체가 생성, 아직 start() 메소드가 호출되지 않은 상태 |
runnable | 실행 상태로 언제든지 갈 수 있는 상태 |
waiting | 다른 스레드가 통지할 때까지 기다리는 상태 |
timed_waiting | 주어진 시간 동안 기다리는 상태 |
blocked | 사용하고자 하는 객체의 락이 풀릴 때까지 기다리는 상태 |
terminated | 실행을 마친 상태 |
Multi process
1.하나의 응용프로그램을 여러 개의 프로세스로 구성
장점
- 여러 프로세스 중 일부 프로세스에 문제가 발생해도 악영향이 다른 곳으로 확산 X
단점
- Context switching(현재 진행하는 task의 상태를 저장하고, 다음 task의 상태 값을 읽는 과정)에 의한 오버헤드
- 복잡한 process간 통신(IPC)
Multi thread
- 하나의 응용프로그램을 여러 개의 스레드로 구성
- 각 스레드가 하나의 작업을 처리하도록 함
장점
- process를 생성하여 자원을 할당하는 시스템 call이 줄어 효율적인 자원 관리
- thread간 자원공유가 자유로움
단점
- 자원 공유의 문제가 발생(동기화)
- 하나의 thread문제가 전체 프로세스에 영향을 끼칠 수 있음
References