728x90
반응형
키워드
- 실행 단위 - cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- 프로세스 - 하나의 스레드만 가지고 있는 단일 스레드 프로세스
- 동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
1. 프로그램과 프로세스
프로그램 : 피자 레시피
프로세스 : 피자
프로그램이 프로세스로 되어지는 것이다.
프로그램이 프로세스가 되면서 어떤일이 일어나는지?
- 프로세스가 필요로 하는 재료들이 메모리에 올라가야 한다.
- 메모리에는 Code, Data, Heap, Stack 영역으로 나누어진다.
- 해당 프로세스에 대한 정보를 담고 있는 PCB블럭이 프로세스 생성시 함께 만들어진다.
2. 프로세스 & 스레드
<전제>
사람들은 하나의 프로세스만 사용하기보다는 카카오톡, 크롬, 음악 등등 여러가지를 동시에 사용하고 싶어한다.
하지만 원래 한 프로세스가 실행되기 위해서 CPU를 점유하고 있으면 다른 프로세스는 실행 상태에 있을 수 없다.
- 컨텍스트 스위칭은 다수의 프로세스를 동시에 실행하기 위해 여러 개 프로세스를 시분할(짧은 텀 반복)로 실행한다.
- 컨텍스트 스위칭을 줄이기 위해 경화된 프로세스인 스레드가 등장했다. 하나의 프로세스 안에 다수의 스레드가 있을 때 공유되는 자원(Code, Data, Stack영역)이 있기 때문이다. 스레드는 한 프로세스에 stack 영역을 제외하고 공유하여 사용한다. 그래서 메모리에 효율적이다.
컨텍스트 스위칭은 CPU를 한 프로세스가 점유하는 것이 아닌 여러 개의 프로세스가 돌아가면서 사용한다.
3. 멀티프로세스 vs 멀티스레드
멀티프로세스와 멀티스레드 이 두 가지 개념이 모두 처리방식의 일종이다.
- 멀티프로세스는 부모 프로세스가 fork()를 해서 자식 프로세스를 생성하고 각 프로세스는 독립된 메모리를 가진다.
- 멀티스레드는 한 프로세스의 실행단위를 여러 개로 나눈것이다. 즉, 프로세스 내에서 분리해서 여러 스레드로 나뉘어서 실행단위가 나뉘어지면 멀티스레드가 된다.(인텔리제이를 사용하면서 코드를 작성하는 동시에 추천코드도 보여주는 등)
- 한 어플리케이션에 대한 작업의 단위가 나누어질때가 많아서 이때 각각의 스레드가 그 작업들을 담한다. 이게 멀티 스레드이다.
멀티프로세스 | 멀티스레드 |
각 프로세스는 독립적 | Thread끼리 긴밀하게 연결되어 있음 |
IPC를 사용한 통신 | 공유된 자원으로 통신 비용 절감 |
자원 소모적, 개별 메모리 차지 | 공유된 자원으로 메모리가 효율적임 |
컨텍스트 스위칭 비용이 큼 | 컨텍스트 스위칭 비용이 적음 |
동기화 작업이 필요하지 않음 | 공유 자원 관리를 해야 |
4. 멀티코어
멀티코어는 병렬처리, 물리적으로 여러 코어를 사용 해서 다수의 실행 단위를 한순간에 동시에 처리할 수 있게 해준것.
5. 요약
- 프로세스는 프로그램이 실행된 것이다.
- 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.
- 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식(멀티 프로세스 멀티 스레드)이 있다.
- 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 CPU를 점유하며 context switching을 한다.
- 멀티 프로세스는 독립적인 메모리르 가지지만 멀티 스레드는 자원을 공유한다.
728x90
반응형