Process vs Thread
1. Process
- 프로그램이 실행된 상태를 말한다.
- 프로그램을 실행하기 위해서는 필요한 메모리를 할당 받는다. (Code, Data, Heap, Stack)
- 각각의 프로세스는 자원을 공유하지 않는다.
- 자원을 공유하지 않기 때문에 Context Switching 비용이 크다
- ex) 햄버거를 만드는 프로그램인 경우, 햄버거를 만들기 위해 필요한 재료를 만드는 일을 모두 수행하는 것.
2. Thread
- 하나의 프로세스 내에서 나뉘어진 하나 이상의 실행 단위를 말한다.
- 부모 프로세스의 자원을 공유한다. (Code, Data, Heap)
- 자원을 공유하기 때문에 Context Switching이 발생할 때 캐시 적중률이 올라가고, 비용이 작다.
- ex) 햄버거를 만드는 프로그램인 경우, 햄버거를 만들기 위해 필요한 재료 중 하나를 만드는 일을 수행하는 것.
Multi-Process vs Multi Thread
어플리케이션의 Task 처리 방식을 말한다.
1. Multi-Process
- 여러 사용자가 요청을 보낸 경우, 부모 프로세스가 fork를 통해 자식 프로세스를 생성해 일을 처리하도록 하는 방식이다.
- 자식 프로세스는 부모 프로세스와 별개의 메모리 영역을 지닌다.
- Context Switching 비용이 크다.
- 자원을 공유하지 않기 때문에 동기화 작업이 필요하지 않다.
- 대표적인 예) 구글 크롬이다. 크롬의 탭은 별개의 프로세스이다. 따라서 메모리를 많이 점유하게 되지만, 하나의 탭에서 문제가 발생하더라도 나머지 탭에는 영향을 주지 않는다.
2. Multi-Thread
- 하나의 프로세스 내에서 여러 가지 업무를 동시에 처리하도록 하는 방식이다.
- 하나의 어플리케이션의 작업 단위가 나뉘어지는 것이다.
- 공유된 자원으로 메모리를 효율적으로 사용할 수 있다.
- Context Switching 비용이 적다.
- 자원을 공유하기 때문에, 공유하는 자원에 대한 동기화 작업이 필요하다.
- 대표적인 예) IE. IE의 경우 탭을 하나의 스레드로 보면 된다. 따라서, 하나의 탭에서 문제가 발생하면 나머지 탭에 영향을 주게 된다.
Context Switching
- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고, 다음 진행할 Task의 상태 값을 읽어 메모리에 적재하는 과정을 말한다.
- 여러 개의 Task가 동시에 실행되는 것처럼 보이게 하기 위해서는 빠른 속도로 Task를 바꿔 가며 실행해야 한다.
- CPU가 Task를 바꿔 가며 실행하기 위해 필요한 기술이다.
1. Task의 대부분의 정보는 Register에 저장되고, PCB(Process Control Block)에 의해 관리된다.
2. 현재 실행하고 있는 Task의 PCB 정보를 메모리에 적재한다.
3. 다음 실행할 Task의 PCB 정보를 메모리에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행한다.
댓글