2013. 12. 19. 10:06
프로세스와 쓰레드의 차이.  process, thread 차이

1. 
프로세스는 독립적으로 실행되며 자신만의 고유공간과 자원을 할당 받아 사용한다.
쓰레드는 한 프로세스 내에서 동작되는 여러 실행흐름 으로 프로세스 내 주소 공간이나 자원들을 대부분 공유하면서 실행된다.

2. 
프로세스는 부모 프로세스의 데이터 세그먼트의 자체 복사폰을 가지고 있다.
스레드는 그 프로세스의 데이터 세그먼트에 직접 엑세스 가능하다.

3. 
프로세스는 형제 프로세스와 통신하기 위해서 반스디 프로세스간 통신을 사용해야 한다.
스레드는 프로세스내 다른 스레드와 직접 통신 할 수 있다.

4. 
프로세스는 상당한 오버헤드가 있다.
스레드는 오버헤드가 거의 없다.
오버헤드(overhead)는 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다. 

5. 
새로운 프로세스는 부모 프로세스의 복제를 필요로 한다.
새로운 스레드를 쉽게 만들 수 있다.

6. 
프로세스는 자식 프로세스에 대한 제어를 행사 할 수 있다.
스레드는 동일한 프로세스의 스레드를 제어 할 수 있다.

7. 
부모 프로세스에 대한 변경은 자식 프로세스에 영향을 주지 않는다.
메인 쓰레드의 변경(취소,우선순위변경 등) 은 프로세스내 다른 스레드의 행동에 영향을 미칠 수 있다.


스레드의 장점
-시스템의 throughput이 향상된다.
-시스템의 자원 소모가 줄어든다.
-프로그램 응답 시간이 단축된다.
-프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.

스레드의 단점
프로그램 디버깅이 어렵다.
여러개의 스레드를 이용하는 프로그램을 작성하는 경우에는 주의 깊게 설계해야 한다.

스레드간 통신시에 데이터를 주고받는 방법은 메모리 공간을 공유하므로 데이터 세그먼트, 즉 전역 변수를 이용하여 구현한다. 
그런데 전역변수를 여러 스레드가 함께 사용하려면 문제가 발생한다.  따라서 스레드 간에 통신을할 경우에는 충돌 문제가 발생하지 않도록 동기화 문제를 해결해야 한다.



그외.

프로세스는 CODE, DATA, HEAP, STACK 으로 구성 되어 있고 쓰레드는 프로세스 안에서 CODE, DATA, HEAP을 공유하고 STACK 만 별도로 가주고 있다.
프로세스간 이동 시에 비해 STACK 만을 Switching 하면 되므로 전환 속도가 빠르다.






Posted by hoonihoon