가장 아래에는 DVD 플레이어와 같이 생긴 서버가 배열돼 있다. 세 대의 서버는 스위치를 경유해서 연결돼 있다. 각각의 서버를 확대해서 보면 CPU, 메모리, 디스크, NIC/HBA 같은 하드웨어 부품이 나열돼 있다. 이들은 물리 장치이다.
그 위에는 CPU와 메모리 영역을 확대한 것이다. 이 부분은 ‘오퍼레이팅 시스템(OS)’ 영역을 보여 주고 있다. 막대 인간과 커널(Kurnel)에 대해서는 다음에 설명한다.
인터넷에서 프로그램을 다운로드 받아 PC에 설치해본 적이 있을 것이다. 프로그램을 설치해서 아이콘을 더블클릭해서 시작하면 창이 뜬다. 다시 한번 프로그램 아이콘을 더블클릭하면 다른 별도의 창이 열릴 것이다. 이것이 프로세스나 스레드라고 불리는 것이다.
프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행돼서 어느 정도 독립성을 가지고 동작하는 것이다. 대부분의 책이 ‘사람 모양’으로 표현하고 있듯이, 프로세스나 스레드가 시작되는 것은 마치 사람이 숨을 쉬기 시작하면서 활동하는 것과 같은 의미다.
프로세스 및 스레드가 활동하려면 메모리 공간이 필요하다. 이것은 커널에 의해 메모리상 확보된다. 이 메모리 공간은 막대 인간이 자신을 위해 소유하는 공간으로, 개인 공간이라 할 수 있다. 다양한 처리를 하면서 데이터를 주고받기 위해 이 공간을 사용한다.
먼저, 웹 서버를 보자. ‘httpd 프로세스’라고 쓰여 있는 막대 인간이 프로세스이다. 그 주변을 감싸고 있는 하얀 공간이 있는데, 이것이 프로세스의 메모리 공간을 나타낸다.
AP 서버도 보자. ‘스레드’라고 쓰여 있는 막대 인간이 스레드다. 웹 서버와 달리 AP 서버 상의 막대 인간은 하나의 메모리 공간을 공유하고 있다. 이것이 프로세스와 스레드의 큰 차이점이다. 프로세스는 전용 메모리 공간을 이용해서 동작한다. 스레드는 다른 스레드와 메모리 공간을 공유하고 있는 운명 공동체다.
예를 들면, 프로세스는 맞벌이 부부처럼 통장을 각자 관리하고 있는 형태다. 반면에 스레드는 아내가 남편의 부양가족이 되는 모습이다 자녀가 많아지면 부양가족이 늘어나지만, 하나의 통장으로 꾸려나가야 한다. 두 가족 모두 구조는 다르지만 생활한다는 목적은 같다. 프로세스와 스레드 관계도 비슷하다.
프로세스와 스레드 중에 어떤 것을 이용할지는 애플리케이션 개발자가 정한다. 이때 각각의 특성을 이해하고 설계와 프로그래밍할 필요가 있다. 예를 들어, 프로세스는 독자 메모리 공간을 가지기 때문에 생성 시 CPU 부하가 스레드와 비교해 높아진다. 때문에 멀티 프로세스 애플리케이션에서는 프로세스 생성 부담을 낮추기 위해 미리 프로세스를 시작시켜 둔다. 이 실제 예가 연결 풀링(Pooling)이라 불리는 것이다.
프로세스 | 스레드 | |
---|---|---|
장점 | 개별 처리 독립성이 높다 | 생성 시 부하가 낮다 |
단점 | 생성 시 CPU 부하가 높다 | 메모리 공간을 공유하기 때문에 의도하지 않는 데이터 읽기/쓰기가 발생할 수 있다 |