동시성과 병렬성에서 병렬성의 경우 하드웨어 의존도가 높고, 동시성의 경우 소프트웨어 의존도가 높다고 설명했습니다. 동시성에서 작업을 어떻게 나눌지, 어떻게 분배할지에 관해 고민하던 중 탄생한 것이 스레드 입니다.
프로세스는 프로그램이 실행되기 위해 운영체제로부터 CPU, Memory, I/O, 디스크와 같은 컴퓨터 자원을 할당받은 것을 의미합니다. 프로세스는 독립적인 메모리 공간을 할당받기 때문에 프로세스끼리 정보를 주고 받기 위해서는 IPC(Inter-Process Communication)라는 통신 채널이 필요합니다. 대표적인 예로는 socket, character device, shared memory가 있습니다.
스레드는 프로세스의 안에서 프로세스가 할당받은 자원을 이용하여 연산을 실행하는 최소 단위입니다. 하나의 프로세스는 최소 하나의 스레드가 존재하며, 필요에 따라서 프로세스 안에 여러개의 스레드를 만들어서 연산을 처리하기도 합니다. 스레드는 프로세스 내의 실행의 흐름, 프로세스 내의 주소공간, 메모리 자원들을 프로세스 내의 다른 스레드들과 공유하기 때문에 프로세스 내의 다른 스레드와 통신하기 위한 별도의 통신 채널이 필요 없습니다. 하지만 자원의 무결성과 동기화를 보장하기 위한 별도의 처리는 필요합니다.
멀티프로세싱은 2개 이상의 CPU를 사용하여 병렬성을 구현한 것입니다. 단순히 2개 이상의 CPU를 가지는 것이 아닌, CPU가 서로 메모리나 I/O 장치와 같은 컴퓨터 자원을 공유하는 구조, 매커니즘이어야 합니다. 멀티프로세싱을 구현하는 방식은 메모리 공유 방식, 데이터 공유 방식에 따라 여러가지로 나뉘어집니다.
SMP는 CPU들이 동등한 권리를 가지고 같은 물리적 메모리에 접근할 수 있어 CPU들이 대칭을 이루는 구조입니다.
ASMP는 SMP와 달리 CPU마다 다른 권리를 가질 수 있으며, 다른 물리적인 공간을 가질 수 있고 특정 프로세스는 특정 CPU에서만 동작할 수 있도록 설계할 수 있습니다.
ASMP의 CPU들도 SMP처럼 공유 메모리 구조를 가지고 있지만, 프로세스마다 역할을 정하여 한 CPU에서는 OS를 전담하는 등 CPU를 비대칭적으로 사용할 수 있습니다.
멀티스레딩은 하나의 코어가 동시에 여러개의 프로세스나 스레드를 처리하도록 동시성을 구현한 것입니다.. 멀티스레딩이 구현되기 위해서는 운영체제가 멀티스레딩을 지원해야하고 하드웨어도 멀티스레딩이 가능하도록 설계되어야 합니다.
멀티스레딩은 한정된 자원으로 여러가지 작업을 동시에 처리하는 개념입니다. 여러가지 프로세스나 스레드를 조금씩 스케쥴링하여 코어에서 처리하며 CPU의 성능을 끌어올리는데 의의가 있습니다.