멀티프로세싱과 멀티태스킹의 차이
상태바
멀티프로세싱과 멀티태스킹의 차이
  • Network Computing
  • 승인 2001.10.25 00:00
  • 댓글 0
이 기사를 공유합니다

오늘날 판매되고 있는 서버들은 대부분 시스템 하나에 CPU가 두 개 이상 들어 있어서 아주 빠른 속도를 낼 수 있는 멀티프로세서 장치라고 선전되고 있다. 멀티태스킹, 멀티프로세싱, 멀티프로그래밍과 멀티스레딩에서 각 ‘멀티’에는 어떤 차이가 있는걸까? 그것들을 어떻게 함께 적용할 수 있을가? 그리고 ‘멀티’는 프로세서들의 I/O 및 CPU 스케줄링 같은 OS 기능에 얼마나 영향을 미칠까?

멀티스레딩과 멀티프로세싱에 대해 말하기 전에 우선 스레드(thread)와 프로세스(process)가 무엇인지를 알아보자. 스레드는 순차적인 명령어 세트의 수행이 한 번 흘러가는 것(one flow)을 말한다. 프로세스는 그러한 스레드가 한 개 또는 여러 개가 모인 것이고, 애플리케이션은 프로세스가 한 개 또는 그 이상이 모인 것이다.

스레드와 프로세스

단일 스레드 방식의 애플리케이션은 전체 프로그램을 위해 오직 한 개의 스레드만이 존재하는 것으로, 그것은 한번에 하나의 명령만 수행될 수 있게 짜여진 것을 말한다. 하나의 클라이언트와 연결해서 그것의 요구를 해결한 뒤 또 다른 연결을 받아들이는 웹 서버는 단일 스레드 방식인 것이다.

<표1> 스레드 對 프로세스
 장 점단 점
스레드값싸며 만들기 쉽다. 스레드는 그것들을 만드는 프로세스의 일부분이기 때문에 그것의 패어런트의 주소 공간에 있는 공유 메모리에 접근할 수 있다.교착상태의 가능성, 봉쇄
프로세서차일드 프로세서는 실수를 종료하거나 유발할 때 일반적으로 패어런트 프로레스에게 영향을 미치지 않는다. 스레드에서는 그렇지 않다.자원과 제작 시간면에서 비싸다.

멀티스레딩은 하나의 프로세스 안에서 여러 개의 스레드를 사용하는 방식으로, 그것은 여러 개의 수행 지점-스레드당 한 개의 지점-을 제공함으로써 한번에 다수의 작업을 수행할 수 있는 능력을 제공한다.

이 모델은 여러 명령을 동시에 처리할 수 있으므로 애플리케이션의 명령 처리량을 높여준다. 한 클라이언트의 연결을 받아들여 요구를 보다 빨리 해결해 주기 위해 여러 개의 스레드를 사용하는 웹 서버는 멀티스레드 방식이다.

멀티프로세스 방식의 애플리케이션은 그러한 작업을 달성하기 위해 여러 개의 프로세스를 사용한다. 이것의 가장 흔한 실행은 ‘포킹(forking)’ 모델로서, 이 모델에서는 패어런트 프로세스(parent process)에 의해 차일드 프로세스(child process)들이 만들어진다. 이 차일드 프로세스들은 자신들을 만들어낸 프로세스와 똑같은 코드를 수행하지만 메모리나 주소 공간을 공유하지는 않는다.

일례로, 웹 서버를 가동시킨 뒤 클라이언트의 요구를 위해 기다려 보자. 포킹 모델을 이용하는 웹 서버(아파치 버전 1.3.x)는 요구를 받으면 자신을 복제해서(새로운 프로세스를 만들어) 그 요구를 그 복사판에게 넘겨준다. 다른 요구가 들어오면 또 그런 과정이 이뤄진다. 그리고 각 프로세스 안에서는 여러 개의 스레드들이 작동될 수도 있다.

한 스레드는 로깅(logging)을 위해 클라이언트 IP 주소 위에서 DNS 조사를 수행하고 다른 스레드는 클라이언트가 요구한 자원을 찾고 있을 수도 있다. 그와 달리 멀티스레드 방식의 웹 서버는 부가적인 프로세스들을 만들지 않는 대신 멀티프로세스 방식과 비슷하게 작업을 수행하기 위해 여러 개의 스레드를 만든다.


댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.