이전 포스팅에 이어서 프로세스와 스레드 관련 개념을 정리하고자 한다.
이번에는 멀티 스레드, 멀티 프로세스 관련 개념을 정리하는데
멀티 프로세싱, 멀티 태스킹도 이것들과 헷갈리기 쉬워서 함께 공부하면서 정리하고자한다.
다수의 프로세서가 협력적으로 일을 처리하는 것이다.
즉, 여러개의 프로세서가 작업을 병렬적으로 수행하는 것이다.
단일 프로세싱 보다 비용이 절약된다.
한 프로세서가 고장 나도 시스템의 속도만 느려진다.
운영체제와 메모리를 공유하는 여러 프로세서가 프로그램을 수행하는 것이다.
프로세서가 메모리 입출력 버스, 데이터 path를 공유하고 하나의 운영체제가 모든 프로세서를 관리한다.
자원들을 서로 공유하기 때문에 동기화가 필요하다.
각 프로세서는 운영 체제에서 작업을 실행한다.
주 프로세서가 종속 프로세서들을 스케쥴하고 일을 할당한다.
주 프로세서가 전체 시스템을 통제하고 다른 프로세서들은 명령을 따르거나 미리 정해진 일을 수행한다.
자료 공유의 필요성을 감소시키므로 단순하다는 장점이 있다.
다른 Slave 프로세서들은 Master 프로세서가 작업을 할당할 때까지 기다려야 한다는 단점도 있다.
다수의 작업(Task)을 운영체제의 스케줄링에 의해 번갈아 가며 수행하는 방법이다.
프로세서는 특정 순간에 하나의 작업만 수행할 수 있지만 운영체제가 작업을 번갈아가면서
수행하도록 스케줄링하기 때문에 우리의 눈에는 동시에 수행되는 것처럼 보인다.
여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것
프로세스 간의 통신을 하려면 IPC를 통해야 한다.
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다.
이전 포스팅 스레드 vs 프로세스 부분 참고
멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만,
동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.
멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만,
멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.
멀티 스레드 방식은 context switching 시 다른 영역을 다 공유하고 있기 때문에
stack 영역만 처리를 하면 돼서 멀티 프로세스에 비해 작업 부하가 적은 것이다.
반면에 멀티 프로세스 방식은 CPU 레지스터 뿐만 아니라
RAM과 CPU 사이의 캐시 메모리에 대한 데이터까지 초기화를 해야해서 오버헤드가 더 큰 것이다.
여기까지 정리하면 더 소개할 개념은 없을 것 같다!