스레드는 프로세스를 구성하는 실행의 흐름 단위이다. 이 말이 정확히 무엇을 의미하는지, 그리고 멀티스레드와 멀티프로세스의 차이가 무엇인지 알아보자!
프로세스와 스레드
스레드(thread)
- 프로세스를 구성하는 실행의 단위를 뜻한다.
- 한 번에 하나의 스레드가 실행되는 프로세스를 단일 스레드 프로세스라고 한다.
- 한 번에 여러 스레드가 동시에 실행되는 프로세스를 멀티 스레드 프로세스라고 한다.
- 스레드는 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행된다.
멀티프로세스와 멀티스레드
- 여러 프로세스를 동시에 실행하는 것을 멀티프로세스(multiprocess)라고 한다.
- 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드(multithread)라고 한다.
멀티프로세스와 멀티스레드의 차이점
- 프로세스끼리는 자원을 공유하지 않지만 스레드끼리는 같은 프로세스 내 자원을 공유한다.
같은 작업을 하는 동일한 프로세스 두 개가 실행되면?
- 코드 영역, 데이터 영역, 힙 영역 등을 비롯한 모든 자원이 복제되어 메모리에 저장된다.
- 즉 PID, 메모리 주소를 제외한 모든 것이 동일한 프로세스가 메모리에 저장되어있는 상태이기 때문에 메모리 낭비라고 볼 수 있다.
- fork한 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서 동시에 프로세스끼리 자원을 공유하지 않는 방법도 있다. 이를 쓰기 시 복사(copy on wirte)기법이라고 한다.
같은 작업을 하는 동일한 스레드 두 개가 실행되면?
- 프로세스가 가지고 있는 자원을 공유한다. 여러 프로세스를 병행하는 것 보다 메모리를 효율적으로 사용 가능하다.
- 서로 다른 프로세스들은 자원을 공유하지 않기 때문에 서로가 독립적으로 실행되는 반면, 스레드는 프로세스의 자원을 공유하기 때문에 협력과 통신에 유리하다.
- 그러나 하나의 스레드에 문제가 생기면 다른 스레드도 영향을 받아 프로세스 전체에 문제가 발생하게 된다.
프로세스 간 통신(IPC. inter-process communication)
- 프로세스는 기본적으로 자원을 공유하지 않지만 프로세스 간의 자원을 공유하고 데이터를 주고 받도록 하는 것을 뜻한다.
- 줄여서 IPC라고 부르기도 한다.
- 프로세스들은 서로 공유하는 메모리 영역을 두어 데이터를 주고받을 수 있는데, 그 영역을 공유 메모리(shared memory)라고 한다.