프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
프로세스는 프로세스 기술자라고 부르는 자료구조에 저장되어 있다.(PCB) 이 자료구조는 크게 다음과 같은 정보를 담고 있다.
운영체제는 프로세스들의 실행 사이에 프로세스를 교체하고 재시작할 때 오류가 발생하지 않도록 관리해야 하기에 운영체제는 프로세스의 상태를 실행, 준비, 블록 상태로 분류하고 프로세스들을 상태전이를 통해 체계적으로 관리한다.
프로세스는 code영역, data 영역, heap영역, stack 영역으로 존재하고 힙영역과 스택 영역 사이에는 빈 공간이 존재한다.
스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
스레드를 사용하면 프로그램이 동시에 여러 가지 작업을 수행할 수있는데 예를 들어, 웹 브라우저에서는 사용자 인터페이스를 처리하는 스레드와 웹 페이지를 다운로드하는 스레드 등 여러 개의 스레드가 실행된다. 이렇게 여러 개의 스레드가 동시에 실행될 때는 각각의 스레드가 서로 독립적으로 실행되는 것처럼 보이지만, 실제로는 컴퓨터의 프로세서에서는 각각의 스레드가 번갈아가면서 실행된다.
스레드를 사용하면 프로그램의 성능을 향상시킬 수 있다. 예를 들어, 웹 서버에서는 각각의 요청에 대해 새로운 스레드를 생성하여 처리함으로써, 여러 클라이언트로부터 동시에 요청이 들어왔을 때도 모든 요청에 대해 빠르게 응답할 수 있다.
스레드는 프로세스와 달리, 수행방식에 있어서 부모 프로세스 전체의 복사본을 만들지 않고, 필요한 코드 덩어리 만을 생성하여 동시에 수행한다.
스레드들 모두가, 동일 프로그램으로 생성되나(동일 생성), 서로 독립되어 실행된다.(독립 실행)
주요 메모리 공간을 함께 공유한다.
따라서, 부모 스레드가 갖고 있는 모든 데이터를 완전하게 접근할 수 있기 때문에 효율적이고 메모리 제약이 있는 시스템에 널리 사용된다.