프로세스는,
프로그램이 실행된 형태를 말합니다.
프로세스가 실행되려면 필요한 리소스들이 메모리에 올라가야 합니다.
또한 해당 프로세스에 대한 정보를 담고 있는 PCB block이 프로세스 생성 시 함께 만들어집니다.
우리는 여러개의 프로그램을 동시에 사용합니다. (노래, IDE, 메신저 앱 등)
하지만 프로세스가 실행 상태에 있다면 다른 프로세스는 실행 상태에 있을 수가 없습니다.
따라서 다수의 프로세스를 동시에 실행하기 위해 여러 개 프로세스를 시분할로, 즉 짧은 텀을 반복하면서 전환하면서 실행을 시킵니다.
따라서 프로세스들이 반복적으로 CPU를 점유하면서 실행상태, 준비상태를 반복하게 되는데 이를
context switching
이라고 합니다.
하지만 프로세스가 많아진다면
따라서 경량화된 프로세스 버전인 스레드
가 등장하게 됩니다.
스레드가 경량화된 프로세스라고 불리는 이유는
하나의 프로세스 안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문입니다.
프로세스의 메모리 구조에는
각 스레드는 스택 부분만 따로 가지고 있는 것
입니다.쉽게 말하자면,
실행 상태로 변경될 때 CPU가 점유하는 모든 메모리를 다 지우고 다시 적재할 필요가 없다는 것 입니다.
멀티프로세스와 멀티스레드 이 두 가지의 개념 모두 처리방식의 일종
입니다.
한 어플리케이션에 대한 다른 처리방식이라고 생각하면 쉽습니다.
한 어플리케이션이 여러가지 일을 처리해야 하는 경우가 있습니다.
예를 들어,
여러 사용자가 로그인을 하는 경우에는 프로세스는 한번에 하나의 로그인만 처리할 수 있기 때문에
부모 프로세스가 fork()를 해서 자식 프로세스가 일을 처리하도록 하게 합니다.
이때 자식 프로세스는 부모 프로세스와 별개 메모리 영역을 확보하게 됩니다.
자원을 공유하며 컨텍스트 스위칭 비용이 덜 들고 메모리의 효율이 멀티프로세스보다 멀티스레드가 좋지만 왜 멀티프로세스를 사용하는 것일까요?
멀티스레드의 경우에는 프로세스내 공유되는 메모리 영역이 있기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향이 가게 됩니다.
멀티프로세스, 멀티스레드는 처리방식의 일종이기 때문에 소프트웨어적 측면에 가깝고,
멀티코어의 경우는 하드웨어적 측면에 가깝습니다.
멀티코어와 관련된 키워드는 동시성과 병렬처리
입니다.
동시성
멀티코어