프로세스와 스레드를 설명하기 전에 먼저 프로그램에 대해 알아보자.
프로그램이란?
파일이 저장 장치에 있으나 메모리에는 올라가있지 않은 정적인 상태이다.
프로그램이 실행되면 메모리에 올라가게 되고, 동적인 상태가 된다. 이 상태의 프로그램을 프로세스라고 한다.
프로세스란?
운영체제로부터 자원을 할당받는 작업의 단위이다.
스레드란?
할당 받은 자원을 이용하는 실행의 단위이다.
시간이 흐르고 프로그램이 복잡해지면서, 하나의 프로세스로만 프로그램을 실행하기 벅차게 되었다.
여러개의 프로세스를 사용할 수 있으면 좋겠지만, 운영체제는 안정성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하려면 오류가 발생하게 된다.
따라서, 프로세스보다 더 작은 실행 단위인 스레드가 필요하게 되었다.
스레드는 서로 자원을 공유할 수 있고, 프로세스 실행흐름의 일부가 될 수 있다. 또한, 스레드는 프로세스가 할당받은 메모리 영역 내에서 stack 형식을 제외하고 code, data, heap 형식으로 할당된 메모리 영역을 공유한다.
따라서 각각의 스레드는 별도의 stack 메모리가 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.
만약 프로세스를 실행하다가 오류가 생겨 강제로 종료된다면, 다른 프로세스에는 영향을 주지 않지만 메모리 영역을 공유하고 있는 스레드 중 하나에서 오류가 난 경우 모든 프로세스 내의 스레드가 강제 종료된다는 차이점이 있다.