What I Learned
Process
프로세스는 간단히 말해 실행중인 프로그램이다. 프로그램이 실행되면 해당 OS로부터 필요한 자원(메모리)를 할당받아 프로세스가 된다. 그러므로 프로세스는 운영체제로부터 자원을 할당받은 작업의 단위라고도 할 수 있다.
- 프로그램은 파일이 저장장치에는 있지만 메모리는 할당되지 않은 정적인(실행되지 않은 파일상태) 상태를 말한다. 프로그램이 실행되려면 그에 맞는 메모리 공간이 필요하다.
- 프로세스가 OS로부터 할당받는 자원에는 CPU 시간, 필요한 주소공간, 그리고 code, data, stack, heap으로 구성된 독립된 메모리 영역이 있다.
- 프로세스는 운영체제의 관점에서 최소 작업 단위이고 메모리 영역을 다른 프로세스와 공유하지 않는다.
- 프로세스간 자원을 공유하려면 IPC(Inter-Process Communication, 프로세스간의 통신)을 사용해야하고 이는 자원의 부담이 크다.
Thread
스레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하는 최소 작업 단위이다. 프로세스가 OS의 최소 작업 단위라면 스레드는 프로세스에 포함된, 프로세스보다 더 작은 실행 단위이고 스레드가 실제 작업을 수행한다.
- 스레드에 할당되는 메모리는 stack뿐이고 다른 자원은 해당 스레드가 속해있는 프로세스의 자원을 가져다 쓴다.
멀티스레드
모든 프로세스에는 스레드가 하나 이상 존재하고 둘 이상의 스레드를 가진 프로세스를 멀티스레드 프로세스라고 한다. 여러 작업을 동시에 수행하는 게 가능해져 멀티스레드에는 여러 장점이 있지만 단점도 있다.
- 멀티스레드의 장점
- CPU의 사용률을 향상시키다.
- 자원을 공유해 효율적으로 사용할 수 있다.
- 동시에 여러 작업이 가능해지므로 사용자에 대한 응답성이 향상된다.
- 여러 스레드로 작업을 분리해 코드가 간결해진다.
- 멀티스레드의 단점
- 동기화 문제(자원공유의 문제)
- 하나의 스레드에 문제가 발생하면 다른 스레드에도 문제가 발생한다.
이러한 멀티스레드의 문제는 멀티프로세스에서는 발생하지 않는데 그건 운영체제가 프로세스가 돌아가는 순서를 정해주고 프로세스끼리는 자원을 공유하지 않아서이다. 스레드의 단점을 최소화하기 위해 프로그래밍 시 이런 사항을 충분히 고려해야한다.
References
프로세스와 스레드의 차이[OS] 프로세스와 스레드의 차이
자바의 정석 기초편 13장
Comment