이전 회차에서 Process가 무엇인지 간단하게 배웠습니다.그렇다면 Thread 란 무엇일까요?
쓰레드란 간단히 말하면 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다.
그렇다면 Process 와 Thread의 정확한 차이는 무엇일까?
우선 프로세스는 실행 중일 때, 프로세스끼리 독립적이기 때문에 한 프로세스에서 문제가 발생해도 다른 프로세스에는 영향을 주지 않는다.
그러나 쓰레드는 메모리를 서로 공유하며 수행되기 때문에 여러 개의 쓰레드가 실행 중일 때, 하나의 쓰레드에서 문제가 발생하면 같은 프로세스 내의 모든 쓰레드는 강제 종료된다.
하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 수행하도록 하는 것이다.
프로세스당 메모리가 독립적이라 무거운 작업이 진행되어 문맥 교환 (Context Switch) 시 오버헤드가 발생한다.
자원 공유가 안돼있기 때문에 프로세스 간의 통신 기법(IPC)이 복잡하다.
하나의 응용 프로그램을 여러 개의 쓰레드로 구성하여 각 쓰레드가 하나의 작업을 수행하도록 하는 것이다. 웹서버가 대표적인 멀티 쓰레드 응용 프로그램이다.
프로세스에 비해 생성하는 과정이 가볍기 때문에 자원을 효율적으로 사용할 수 있다.
데이터 공유로 자원 소모가 감소하며 작업량이 작아 문맥교환이 빠르게 이루어져 시스템 처리량이 증가한다.
Stack 을 제외하고 저장공간을 공유하기에 사용자에 대한 응답성이 향상된다.
자원을 공유하기 때문에 쓰레드 하나가 프로세스 내 자원을 회손할 경우 모든 프로세스가 종료될 수 있다.
자원을 공유하기 때문에 DeadLock이 발생하지 않도록 주의해야 한다.