프로세스란?
- 운영체제로부터 자원을 할당받아 메모리 상에 올라와 실행되고 있는 프로그램을 뜻합니다.
- 프로그램이란 파일이 저장 장치에 저장되어 있지만, 정적인 상태를 가지고 있는 파일을 뜻합니다.
- 프로그램에서 프로세스 상태로 변경되면 프로세스 제어 블록(PCB)에 프로세스의 정보가 저장됩니다.
PCB란? CPU가 여러 프로세스들을 관리해야 할 때 프로세스들의 상태를 저장하고 식별하기 위한 자료구조 입니다. PID, 프로세스 우선순위, 프로세스 상태 등이 담겨 있습니다.
- 프로세스가 종료되면 PCB 또한 제거됩니다.
스레드란?
- 프로세스 내에서 실행되는 흐름의 단위를 말합니다. 즉, 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
- 프로세스는 메인 스레드 하나는 반드시 가지고 있습니다. 여러개의 스레드를 가질 수 있으며, 프로세스가 CPU를 받아 실행될 때 프로세스의 작업 단위인 스레드를 이용해 작업을 완료합니다.
- 각각의 스레드는 별도의 스택을 가지고 있으며, 프로세스 내의 Code, Data, Heap을 모두 공유 합니다.
- 그렇기 때문에 동기화 문제(Synchronization)가 발생할 수 있습니다.
동기화 문제란? 멀티 프로세스 혹은 멀티 스레드 환경에서 공유된 자원을 동시에 접근하여 발생하는 문제입니다.
멀티 프로세스 vs 멀티 스레드
멀티 프로세스
- 멀티 프로세스란 하나의 태스크를 여러 프로세스가 동시에 작업하는 것을 말합니다.
- 각각 독립된 메모리를 가지고 있습니다. 그렇기 때문에 하나의 프로세스가 불능이 되어도 다른 프로세스에게 영향을 미치지 않아 안정성이 좋습니다.
- 하지만 Context Switching이 일어나면 공유하고 있는 영역이 존재하지 않기 때문에 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 불러와야 합니다.
- 또한, 각 프로세스는 독립적이기 때문에 IPC를 통한 통신을 해야합니다.
멀티 스레드
- 멀티 스레드란 하나의 태스크를 여러 스레드가 동시에 작업하는 것을 말합니다.
- 스레드들은 부모 프로세스의 Code, Data, Heap을 모두 공유하며 독립된 영역은 Stack 뿐입니다. 그렇기 때문에 메모리를 적게 차지하며 Context Switching시에도 오버헤드가 적다는 장점이 있습니다.
- 하지만 공유된 자원을 사용하기 때문에 하나의 스레드에 문제가 발생하면 해당 스레드를 포함한 모든 스레드과 프로세스도 불능이 됩니다.
- 또, 공유된 자원을 동시에 접근해 발생하는 동기화 문제도 존재합니다. 때문에 주의 깊은 설계가 필요하고 디버깅이 어렵다는 단점이 있습니다.
멀티 태스킹
- 멀티 태스킹은 겉보기에는 멀티 프로세스인것 처럼 보이지만, 우리 눈에 보이지 않게 빠를정도로 다중 프로세스들을 Context-switching을 하며 실행해 사용자로 하여금 동시에 실행되는 것처럼 보이게 하는 것입니다.
ref.