프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
스레드 : 프로세스 내에서의 실행 흐름의 단위

위의 그림처럼 프로그램이 메모리에 올라가면 인스턴스화되어 프로세스가 된다.
이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.

스레드는 프로세스 내에서의 실행 흐름의 단위이고 위 그림과 같이 프로세스는 여러 스레드를 가질 수 있다.
유튜브를 예로 들자면, 동영상을 재생하면서 다른 페이지들을 돌아다니며 데이터들을 받아올 수 있다. 이렇게 한 개의 프로세스(유튜브) 안에서도 여러 가지 일을 동시에 할 필요성이 있고 이를 위해 스레드가 존재하는 것이다.
Q. 프로세스와 스레드의 차이점이 무엇인가요?
A. 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스 내의 실행 흐름입니다. 스레드 덕분에 유튜브에서 동영상을 재생하며 다른 페이지들을 돌아다닐 수 있습니다.
둘의 가장 큰 차이점은 구조일 것 같습니다.
프로세스는 Code, Data, Heap, Stack의 구조를 독립적으로 할당받지만 스레드는 프로세스 내에서 Stack부분만 새로 할당받고 Code, Data, Heap 영역은 공유합니다.
멀티프로세스란 하나 이상의 일을 여러 프로세스에서 병렬로 처리하는 것을 말하는데, 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 Context Switching이 일어납니다. 프로세스는 각각 독립된 메모리 영역이기 때문에 4가지 영역 전체를 변경해야 하므로 Context Switching 과정에서 오버헤드가 발생할 수 있다는 단점이 있습니다.
이러한 단점을 해결하기 위해 멀티스레드를 사용합니다.
스레드는 프로세스 내에서 Stack 영역만 따로 할당받고 Code, Data, Heap 영역은 공유하기 때문에 멀티스레드를 할 때 효율성이 높고 응답 시간이 단축됩니다. 멀티프로세스의 단점인 오버헤드 또한 해결해줍니다.
이렇게 보면 멀티스레드이 좋아보이지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 미친다는 단점이 있습니다. 또한 여러 스레드가 동시에 작업을 하면 공유된 영역의 데이터를 동시에 사용하다가 충돌이 날 가능성이 있으므로 주의해야 합니다.
(이러한 충돌을 막기 위해 세마포어, 뮤텍스를 사용합니다)