Process ?
- OS로 부터 자원을 할당받는 작업의 단위
- 각각의 독립된 영역(Code, Stack, Heap, Data)을 할당 받음
- 프로세스간 변수나 자원에 접근할 수 없음
- 만약 접근하고 싶다면 IPC를 통해 접근해야 함 (파일 과 소켓)
Multi Process ?
- 하나의 프로그램에 여러개의 프로세스를 두고 프로세스 마다 한 가지 기능을 하게 함
Good ?
- 서로의 자원과 자료구조에 접근할 수 없음
- 독립된 구조이고 침투의 가능성이 없어 안정성이 좋다.
Bad ?
- 프로세스가 바뀔 때 마다 메모리 영역을 넓혀줘야 해서(Context Switching) CPU의 부담도 커지고 오버헤드가 발생한다.
Thread ?
- 한 프로세스 내의 실행의 흐름
- 프로세스 내에서 동작하기 때문에 메모리 영역을 독립적으로 받지 못 함.
- Code, Data, Heap 영역은 공공으로 사용한다.
- Stack의 영역은 독립된 영역을 할당받는다.
LIFO : Last In First Out 마지막에 들어온 것이 처음 나가게 되는데Stack을 공유하게될 시 섞인채로 순서대로 나와서 흐름이 엉망이될 수 도 있기 때문이라고 한다.
Multi Thread ?
- 하나의 프로그램에 여러개의 쓰레드를 만들어 쓰레드 마다 한 개의 작업을 하게 만든 것.
Is it good?
- Code, Data, Heap의 영역을 공유하기 때문에 Context Switchin이 빠름
- 새로운 프로세스를 생성하는 것이 아니므로 생성과 소멸도 빠르다.
- 쓰레드간 통신 방법이 훨씬 간단함.
Bad?
- 설계 난이도
- 자원 공유가 장점이자 단점, 접근이 가능해서 내용이 바뀔 수 있다.
- 하나의 쓰레드가 영향을 받으면 전체 쓰레드가 영향을 받는다.