IT/IT ::Linux

Thread, fork의 차이점

골든 2013. 9. 8. 21:17

앞서 user level 입장과 kernel level 입장에서의 Task의 개념을 살펴보았다.

추가해 보자면,

thread는 fork의 비효율성을 극복하기 위해 사용된다. fork는 process를 복제하여 새로운 프로세스를 생성한다. 이때 System 콜이 발생하는데 프로세스 복제를 위해 다른 작업을 할 수 없게 되고 cpu자원을 많이 잡아먹게 된다. 비효율적인 작업이다. 시스템이 자동적으로 Process를 병렬화 하는 것은 불가능하기 때문에 멀티프로세싱이 가능한 시스템에서는 단일 Process로 동작하는 것은 매우 비효율적이다. 이러한 비효율성을 해결하기 위해 Thread가 나오게 되었다.

공통점과 차이점 

 1. 공통점

 Thread와 Process는 스케줄링의 단위가 된다(Context Switch) 그리고 각각은 logical control flow인 PC를 가지며 동시에 동작한다.

 2. 차이점

 Thread는 code, data를 공유하지만 Process는 그렇지 않다. 그리고 생성과 Context Switching, 종료의 관점에서 Thread가 훨씬 비용이 적게 든다.

Thread의 이점

 생성, 종료, Context Switching 비용이 적어 경제적이다. 리소스 공유를 통한 향상된 통신을 할 수 있다. 즉, Process와는 다르게 Kernel의 간섭 없이 Thread 간에 빠르게 정보교환을 할 수 있다. Process의 경우 IPC와 같은 것( 파이프, 세마포어, 공유메모리 등) 을 통해야 하기 때문에 복잡하다. 마지막으로 멀티프로세서 환경에서 매우 유용하다. 각각의 Thread는 다른 프로세서에서 병렬적으로 동작할 수 있다.