프로세스는,
프로그램이 실행된 형태를 말합니다.
프로세스가 실행되려면 필요한 리소스들이 메모리에 올라가야 합니다.

또한 해당 프로세스에 대한 정보를 담고 있는 PCB block이 프로세스 생성 시 함께 만들어집니다.

우리는 여러개의 프로그램을 동시에 사용합니다. (노래, IDE, 메신저 앱 등)
하지만 프로세스가 실행 상태에 있다면 다른 프로세스는 실행 상태에 있을 수가 없습니다.
따라서 다수의 프로세스를 동시에 실행하기 위해 여러 개 프로세스를 시분할로, 즉 짧은 텀을 반복하면서 전환하면서 실행을 시킵니다.
따라서 프로세스들이 반복적으로 CPU를 점유하면서 실행상태, 준비상태를 반복하게 되는데 이를
context switching 이라고 합니다.
하지만 프로세스가 많아진다면
따라서 경량화된 프로세스 버전인 스레드가 등장하게 됩니다.
스레드가 경량화된 프로세스라고 불리는 이유는
하나의 프로세스 안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문입니다.
프로세스의 메모리 구조에는
각 스레드는 스택 부분만 따로 가지고 있는 것입니다.
쉽게 말하자면,
실행 상태로 변경될 때 CPU가 점유하는 모든 메모리를 다 지우고 다시 적재할 필요가 없다는 것 입니다.
멀티프로세스와 멀티스레드 이 두 가지의 개념 모두 처리방식의 일종입니다.
한 어플리케이션에 대한 다른 처리방식이라고 생각하면 쉽습니다.
한 어플리케이션이 여러가지 일을 처리해야 하는 경우가 있습니다.
예를 들어,
여러 사용자가 로그인을 하는 경우에는 프로세스는 한번에 하나의 로그인만 처리할 수 있기 때문에
부모 프로세스가 fork()를 해서 자식 프로세스가 일을 처리하도록 하게 합니다.
이때 자식 프로세스는 부모 프로세스와 별개 메모리 영역을 확보하게 됩니다.

자원을 공유하며 컨텍스트 스위칭 비용이 덜 들고 메모리의 효율이 멀티프로세스보다 멀티스레드가 좋지만 왜 멀티프로세스를 사용하는 것일까요?
멀티스레드의 경우에는 프로세스내 공유되는 메모리 영역이 있기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향이 가게 됩니다.
멀티프로세스, 멀티스레드는 처리방식의 일종이기 때문에 소프트웨어적 측면에 가깝고,
멀티코어의 경우는 하드웨어적 측면에 가깝습니다.
멀티코어와 관련된 키워드는 동시성과 병렬처리 입니다.
동시성
멀티코어
