프로세스는 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태를 의미한다.
프로세스는 code, data heap, stack 영역으로 구분되어 있다.
서로 다른 프로세스간에 메모리 공간 접근은 허용되지 않는다
단! IPC를 구현하면 접근을 할 수 있다.
스레드는 어떠한 프로그램 내에서 실행되는 흐름의 단위를 말한다.
일반적으로 하나의 어플리케이션은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.
스레드는 프로세스 내에서 각각 stack만 따로 할당받고 code, data,heap 영역은 공유한다.
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
프로세스는 자원을 공유하지 않지만, 스레드는 자원을 공유한다!!
멀티 프로세스란 하나의 어플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
멀티 프로세스의 특징
여러개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않는다
구현이 비교적 간단하고 각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당된다.
프로세스 간 통신을 하기 위해서는 IPC를 사용해야 한다.
메모리 사용량이 많다
* 스케쥴링에 따른 Context Switch가 많아지고 성능 저하의 우려가 있다.
멀티 스레드란 하나의 어플리케이션을 여러개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.
사용자와 상호작용하는 어플리케이션의 경우 단일 스레드로 network 또는 DB와 같은 긴 작업을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.
멀티 스레드의 특징
멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않지만, 멀티 스레드는 디버깅이 어렵기 때문에 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 준다.
멀티 프로세스는 각각 독립된 메모리 영역을 갖고 있어 오버헤드 또는 Context Switching이 발생하여 성능이 저하되지만 멀티 스레드의 경우 코드영역과 데이터 영역을 공유하기 때문에 자원소모가 적고 응답시간이 단축되어 시스템 처리율이 향상된다.
출처 및 더 자세한 설명 : 프로세스 vs 스레드