프로세스(Process)란 현재 구동중인 프로그램을 말한다. 흔히 사용하는 프로그램들이 하나의 프로세스 위에서 돌아가게 되고 멀티 프로세스의 경우 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 맡아 처리하도록 하는 것을 말한다.
프로세스는 필요 자원과 데이터, 실제 동작을 수행하는 스레드(Thread)로 구성되어 있다. 스레드는 프로세스 내에서 동작하는 job 단위라고 이해하면 편하다.
프로세스가 공장이라면 자원이 기계, 데이터가 재료, 스레드가 노동자의 개념이 된다.
프로세스에는 하나 이상의 스레드가 동작하게 되며 하나의 프로세스 안에 여러개의 스레드가 포함될 수 있다. 최근에 사용되는 어플리케이션은 대부분 멀티 프로세스로 동작한다. 예를 들어 동영상 플레이어에서 볼륨을 조절하거나 재생 시간을 조절하는 것도 멀티 스레드를 사용하기 때문이다.
또한 프로세스는 별도의 주소 공간에서 실행되며 프로세스 간의 변수와 자료구조에 접근할 수 없다.
다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야 한다.
ex) 파이프, 파일, 소켓
스레드(Thread)란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
모든 프로세스에는 한 개 이상의 스레드가 존재하고 두 개 이상의 스레드가 존재할 경우 멀티 스레드(multi thread)라 부르며 해당 프로세스를 멀티 스레드 프로세스(multi-thread process)라 한다.
멀티 프로세스는 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것을 말한다.
멀티 프로세스의 장점
여러 개의 프로세스 중 하나에 문제가 발생하더라도 해당 프로세스가 죽는 것 이상으로 영향을 끼치지 않는다.
멀티 프로세스의 단점
Context Switching 과정에서 오버헤드가 발생하게 된다. 프로세스는 각각의 메모리가 독립되어 있기 때문에 서로 공유하는 자원이 없고 Context Switching이 발생하면 캐시에 있는 모든 테이터를 리셋하기 때문에 오버헤드가 발생할 수 있다.
또한 독립된 메모리에 구성되어 있기 때문에 프로세스 간의 통신이 복잡하다.
멀티 스레드란 하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 같이 처리하도록 하는 것을 말한다.
대부분의 운영체제들이 멀티 스레딩을 기본으로 한다. 웹 서버 또한 마찬가지이다.
멀티 스레드의 장점
프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
스레드 간에는 자원을 주고받는 것이 간단하기 때문에 시스템 자원 소모가 줄어들게 되고 Context Switching도 빠르게 진행된다.
통신 방법 또한 멀티 프로세스에 비해 간단하다.
멀티 스레드의 단점
설계와 디버깅이 까다롭다고 한다.
다른 프로세스에서 스레드를 제어할 수 없고 자원 동기화의 문제가 발생할 수 있다.
하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받게 된다.