멀티 스레드와 멀티 프로세스의 가장 큰 차이점은 "메모리를 공유하는가?"
이다.
멀티 스레드의 경우 여러 스레드가 하나의 프로세스 내에서 같은 메모리
를 사용합니다. 반면 멀티 프로세스는 각 프로세스가 별도의 메모리 공간
을 가집니다.
공유 메모리를 두거나, 파일, 파이프 등등 프로세스 간의 통신을 위한 기술로 프로세스끼리 통신해야 한다.
=> IPC를 유지하는 비용과 프로세스를 전환하는 비용이 멀티 프로세싱의 단점
반면 스레드의 경우 프로세스의 데이터와 코드, 힙을 공유하다 보니 작업(스레드) 사이에 통신 메커니즘을 구축할 필요가 없다. 바로 공유하고 있는 데이터를 참조하면 그만이다.
컴퓨터 시스템에서 1개 이상의 프로세스가 동시적으로 실행가능하다는 것을 의미
여러 개의 프로세스 유닛(CPU)을 가진 하드웨어에서 활용 가능하다. 다수의 프로세서로 다수의 "프로세스"를 협력적으로 동시에 처리하는 것이다.
fork()
를 통해 자식 프로세스를 생성하는데, 생성된 프로세스는 자신만의 메모리 영역(Heap, Stack, Code, Data)을 소유한다.
프로세스끼리 독립되기에 프로세스 사이에서 공유할 자원이 있다면 프로세스 간 통신 메커니즘(Inter Process Communication : IPC)
을 활용해야 한다.
특징
하나의 프로세스 안에 여러 개의 실행 흐름(스레드)를 두는 방식으로 여러 실행을 동시에 실행하도록 하나의 프로세스를 운영하는 방식
소프트웨어적인 기법으로 프로세스를 작은 단위의 스레드로 분할하여 운영하기에 반드시 다중 CPU가 지원될 필요는 없다. [ 파이프라인 기법으로 구현 ]
프로세스 내에서 데이터, 힙, 코드 영역을 공유하기 때문에 자원의 관점과 문맥 교환 관점에서 멀티프로세싱 방법보다 효율적이다.
장점
하나의 프로세스에서 여러 스레드를 병렬적으로 수행하기에 작업의 효율성이 높다.
EX. 입출력 처리 부분과 CPU 처리 부분을 스레드로 나누어 처리하는 방식
참고자료