하나의 프로세스에서 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티 쓰레딩이라 한다.
하나의 프로그램에 동시에 여러개의 일을 수행할 수 있도록 해준다.
프로세스를 이용하여 동시에 처리하던 일을 쓰레드로 구현할 경우
메모리 사용 공간과 시스템 자원 소모가 줄어들게 된다.
쓰레드간의 통신이 필요한 경우에 별도의 자원을 사용하는 것이 아니라, 전역 변수의 공간(code, data) 또는 동적 할당된 공간(heap) 을 통해 데이터를 주고받을 수 있다.
context switching 중 cache memory(PCB) 를 비울 필요가 없다.
따라서 시스템 처리량이 향상되고 자원소모가 줄어들어 응답속도가 빨라진다.
프로세스와 달리 독립적인 구조, 공간을 소유하지 않아서, 하나의 쓰레드에 문제가 생기면 자원을 공유중인 다른 쓰레드에도 영향을 줄 수 있다.
Stack 을 제외한 메모리 영역을 모두 공유하기 때문에 모든 쓰레드가 동시에 접속 가능한 공유자원이 발생 할 수 있다. 공유자원에 대한 동기화를 해줘야함(Mutex/Semaphore/Monitor).