멀티 프로세싱이란 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
멀티 프로세싱을 할 경우 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 다른 프로세스에게 영향이 확산되지 않는다는 장점이 있다.
그러나 현재 작업의 상태를 저장하고 다음 진행할 작업의 상태값을 읽어 적용하는 Context-Switching
과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다. 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 간 공유하는 메모리가 없어, Context-Switching
이 발생하면 캐시에 있는 모든 데이터를 리셋하고 다시 캐시 정보를 불러와야 하기 때문이다.
멀티 스레딩이란 하나의 프로세스가 여러 작업을 여러 개의 스레드를 사용하여 동시에 처리하도록 하는 것이다.
멀티 스레딩을 할 경우 스레드간 Stack영역을 제외한 메모리를 공유하고 있기 때문에 스레드 간 작업량이 작아Context-Switching
이 빠르며 자원을 효율적으로 관리할 수 있다. 또한 통신의 부담이 적어 응답시간이 빠르다.
하지만 스레드 하나가 프로세스 내 자원을 망친다면 전체 프로세스에게 영향을 받게 된다. 또한 스레드 간에 전역변수로 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 밖에 없다. 스레드의 스케줄링은 운영체제가 자동으로 해주지 않기 때문에 프로그래머의 주의 깊은 설계가 필요하며 디버깅 또한 까다로워진다.
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4