티스토리 뷰
Process와 Thread의 비교는 전산학의 '꽃' (아니면 말고..)인 '운영체제'에서 중요하게 다루는 내용이므로 취준생이라면 꼭 짚고 넘어가야할 내용이다.
먼저, Process와 Thread에 대해 정의를 내리자면,
Process: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
Thread: 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
(출처: 위키피디아 해당 항목.)
프로그램(Program)에 대해 다들 알 것이다. 프로그램은 명령어들과 데이터의 묶음이라고 할 수 있다. 운영체제가 프로그램에 메모리를 할당하여 실행하면 이를 프로세스라고 한다. CPU의 프로세서는 하나의 프로세스만 구동할 수 있다.
운영체제는 하나의 CPU로 여러 개의 프로세스를 구동하기 위해 '시분할 방식'을 사용한다. (CPU는 매우 빠른 속도로 연산할 수 있으므로 아주 잠깐씩 여러개를 실행하면, 사용자는 동시에 여러개가 실행되는 것으로 느낀다.) 어떤 프로세스를 더 먼저 or 더 길게 실행할 것인지 스스로 판단하며 이에 관련된 다양한 기법이 존재한다.
(※참고: [IT 기술면접 준비자료] CPU 스케줄링 기법)
멀티스레드와 프로세스 간의 관계를 설명하는 그림.
반면 스레드는 프로세스 내에서 실행되는 흐름의 단위이므로 특정 프로세스에 반드시 포함된다. 하나의 프로세스는 하나 이상의 스레드를 갖는다. 즉, 프로세스 내에서도 처리 흐름이 여러개가 될 수 있다. 하지만 운영체제는 프로세스 단위로 메모리를 할당하므로, 같은 프로세스 소속의 스레드는 메모리를 공유한다. (스레드도 각자의 스택영역을 보유하므로 완전히 공유한다고 보기는 어렵다.)
스레드가 메모리를 공유함으로써 생기는 프로세스와의 차이점.
◎ 동시에 여러 작업을 할 때, 멀티 스레드가 시스템 자원을 더 적게 사용함.
◎ 프로세스는 메모리 공유를 하지 않으므로, 프로세스간 통신은 스레드간 그것에 비해 복잡함.
◎ 스레드의 경우 공유 자원에 대한 동기화(Synchronize)이슈 발생.
동시에 여러 작업을 할 때는 멀티 스레드를 사용하는 것이 멀티 프로세스보다 시스템 자원(메모리)를 더 적게 사용한다. 특히 멀티 프로세서 환경(듀얼코어 이상의 CPU)에서는 효과가 더욱 증대된다. 한편, 스레드간 통신은 공유 메모리(Heap 영역)을 통해 가능하다. 하지만 프로세스는 서로 통신하려면 IPC(Signal, Pipe, Socket)등의 기술을 사용해야한다.
지금까지만 봤을 때는 스레드가 프로세스에 비해 탁월한 기능을 가지고 있어보이지만, 스레드에도 단점이 존재한다. 바로, 동기화(Synchronize)이슈이다. 스레드1이 공유 자원 내의 어떤 데이터를 조작하다가, 스레드2에 제어권을 넘겨준 이후 스레드2가 그 데이터를 변경한다면 스레드1이 다시 제어권을 받아 남은 작업을 계속할 때 원치 않는 결과가 나올 수 있다.
그림2. 동기화 이슈와 이를 해결하는 방법.
위 그림을 보자, Alice와 Bob이 같은 계좌에서 돈을 인출하려고 한다. Alice가 50달러를 인출한 이후, 계좌에서 50달러가 감소하기 전에 Bob이 60달러를 인출한다면? 큰일난다.(마이너스 통장) 그래서 한 사람(스레드)가 특정 자원에 접근할 때는, 다른 사람(스레드)가 그 자원에 접근하지 못하도록 Lock을 걸어야 한다.
이와 같은 다양한 동기화 기법을 운영체제가 제공한다. (운영체제들이 공유하는 표준도 있다.) 하지만 스케줄링을 운영체제가 자동으로 해주지 않고, 프로그래머가 적절한 기법을 선택하여 직접 구현해야하므로 프로그램을 멀티 스레드로 개발할 때는 신중해야한다.
-끝-
출처
그림1: https://sites.google.com/site/sureshdevang/thread-vs-process
그림2: http://www.anandtech.com/show/6290/making-sense-of-intel-haswell-transactional-synchronization-extensions
'IT > 기술면접' 카테고리의 다른 글
[IT 기술면접 준비자료] 가상메모리의 동작과 페이지폴트(Page Fault) (0) | 2016.12.11 |
---|---|
[IT 기술면접 준비자료] 해시(Hash)와 해시충돌(Hash Collision) (0) | 2016.11.27 |
[IT 기술면접 준비자료] Wrapper Class와 AutoBoxing (0) | 2016.10.30 |
[IT 기술면접 준비자료] CPU 스케줄링 기법 (선점 스케줄링, 비선점 스케줄링) (0) | 2016.10.16 |
[IT 기술면접 준비자료] 교착상태(Deadlock)와 식사하는 철학자들(Dining Philosophers) (0) | 2016.10.02 |