Process 와 Thread 의 특징을 비교 분석해볼 것이다. 그 동안 어렴풋이 알아왔던 것 중에 하나가 바로 이것 이었다.
훗날 개념을 혼동하지 않기 위해 이번 기회에 문서로 남겨본다. 여기서는 프로세스(Process) 와 쓰레드(Thread) 를 혼용해서 사용할 것이다.
준비운동 하기
내가 예전부터 알고 있던 Process 와 Thread 에 대해서 설명해보면 다음과 같다.
흔히 웹 서버에 비유해서 설명한다. Process 방식을 사용하는 대표적인 웹 서버에는 apache 가 있고, Thread 방식을 사용하는 대표적인 웹 서버에는 iis 가 있다. 이 두 개의 웹 서버를 통해서 Process 와 Thread 를 이해한다.
Process 방식
먼저 apache 부터 설명한다. httpd.conf 파일의 설정에 따라 다르기는 하겠지만, 기본적으로 httpd 데몬은 시작할 때 5 개가 만들어진다. 클라이언트가 요청을 할 때마다, 데몬은 이에 대한 처리를 담당한다. 만일 데몬의 수보다 클라이언트의 요청이 더 많아지면, 시스템에서는 httpd 데몬 프로세스를 증가시킨다. 이때 프로세스 단위로 증가시키기 때문에 시스템의 오버헤드는 크다. 하지만, 만일 실행 도중에 예기치 않은 오류 때문에 프로세스가 죽는(kill) 다면, 총 httpd 데몬 프로세스 중에서 해당되는 프로세스만 죽이면 된다. 나머지 프로세스들은 전혀 영향이 미치지 않는다.
Thread 방식
iis 의 경우가 Thread 방식이라고 설명했었다. iis 역시, 클라이언트의 요청이 iis 데몬 thread 보다 많아지면, iis 데몬 thread 를 증가시킨다. 이때 쓰레드 단위로 증가시키기 때문에 앞에 설명했던, Process 방식보다는 시스템의 오버헤드가 적다. 왜나하면, 쓰레드 메모리 영역을 공유하기 때문이다.
하지만, 실행 도중에 예기치 않은 오류 때문에 서비스 중이던 쓰레드가 죽는(kill) 다면, 같은 메모리 영역을 공유하고 있던 다른 쓰레드들 역시 죽어야 한다.
마치며
Process 와 Thread 에 대한 내용이 좀 더 내용이 추가되어야 한다.