쓰레드는 프로세스가 아닌 프로세스 내에서 작동하는 것이기 때문에 메모리 영역을 독립적으로 할당 받지 못한다.
따라서, 위의 사진과 같이 Code, Data, Heap 영역은 공유하고 Stack 영역만 독립적으로 할당받을 수 있다.
쓰레드들 끼리는 Heap 영역을 공유하여 같은 자원에 접근할 수 있지만, 각자의 스택 영역은 서로 접근할 수 없다.
자원 접근에 대한 동기화를 신경쓰지 않아도 된다. 여러 개의 스레드가 공유된 자원을 사용할 경우 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근이 통제되어야 하며 이 작업은 프로그래머에게 많은 노력을 요구하고 비용을 발생시킨다. 단일 스레드 모델에서는 이러한 작업이 필요하지 않다.
문맥 교환(context switch) 작업을 요구하지 않는다. 문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다.
위의 요리사와 식당처럼 쓰레드를 비유하자면 아래의 사진처럼 햄버거를 조리하는 한 조리공간이 프로세스이다.
패티를 굽는 쓰레드. 빵을 굽는 쓰레드, 야채를 올리고 소를 뿌리는 쓰레드등 한 메뉴의 여러 쓰레드들이 한 프로세스에서 조리된다.
프로세스들은 컴퓨터의 자원을 분할해서 쓰지만 쓰레드는 프로세스마다 주어진 자원을 함께 쓴다.
단일 프로세스 : 한 요리사가 중식, 한식, 일식 모두를 하는 것
멀티 프로세스 : 각각의 중식요리사, 한식요리사, 일식요리사가 각자 맡은 요리를 하는 것
단일 쓰레드 : 일식요리사가 회를 만들 때 회를 써는 것
멀티 쓰레드 : 중식요리사가 짜장면을 만들기위해서 면도 만들고, 소스도 만드는 것