본문의 내용은 다음의 강의를 토대로 작성한 글임.
https://www.youtube.com/watch?v=1grtWKqTn50
Keywords
1. 실행 단위 - cpu core에서 실행하는 하나의 단위로프로세스
와스레드
를 포함하는 개념.
- 이 실행 단위는 프로세스일수도 스레드일수도 있음.
2. (부연 설명이 없는) 프로세스 - 하나의 스레드만 가지고 있는 단일 스레드 프로세스
3. 동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것.
예시) 피자집에 가서 피자를 시켰는데 피자가 나왔다고 하면서 피자 레시피가 적힌 종이를 줌.
여기서, 이 레시피는 우리가 열심히 구현하고 있는 코드 파일
에 해당함(=프로그램
).
하지만 이 프로그램은 실행하기 전에는 그저 코드가 구현되어 있는 파일일 뿐임. 이 때, 피자레시피를 통해 피자를 만드는 것처럼 실행이 되어서 사용이 가능한 무언가가 되어야 하는데 이것이 바로 프로세스
임.
프로그램이 프로세스가 되면서 어떤 일이 일어날까?(총 두가지 일이 발생함)
원래 한 프로세스가 실행되기 위해서 cpu를 점유하고 있으면 다른 프로세스는 실행상태에 있을 수 없음. 따라서, 다수의 프로세스들을 동시에 실행하기 위해서 여러 개의 프로세스를 시분할로, 즉 짧은 텀으로 전환해서 사용하려 함.
Context switch
경량화된 프로세스 버전인 쓰레드
가 존재함.여기서, 쓰레드는 코드, 데이터, 힙 영역
을 공통된 자원
으로 사용함. 각 스레드는 스택
부분만을 따로 가지고 있음.
이처럼 공유되는 자원이 있기 때문에 이전처럼 컨텍스트 스위칭이 일어날 때 캐시 적중률이 올라감(= 쉽게 말해 모조리 다 빼고 다시 다 넣을 필요가 없음)
이 두가지는 처리방식의 일종으로 한 어플리케이션에 대한 처리방식이라 생각하면 됨. 따라서, 여기서는 한 어플리케이션을 처리하는 방법이 두 가지가 있구나라고 생각하면 됨.
1) Multi_process
예를 들어 여러 사용자가 로그인을 요청하는 상황이 존재함.
한 프로세스는 매번 하나의 로그인만 처리할 수 있기 때문에 동시 처리를 할 수 없음
따라서, 부모 프로세스는 fork를 통해 자식 프로세스를 여러 개 만들어서 이를 처리하게 함. 이 떄, 자식 프로세스는 부모 프로세스와 별개의 메모리 영역을 확보하게 됨.
2) Multi_Thread
한 프로세스 내에서 구분지어진 실행 단위임.
만일 프로세스가 다수의 스레드로 구분되어 있지 않으면 단일스레드 하나로 프로세스가 실행됨. 다시 말해 해당 프로세스의 하나밖에 없는 쓰레드가 실행 단위가 됨.
동시성(Concurrency): 하나의 코어에서 하나 이상의 프로세스(혹은 쓰레드)가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것
병렬처리(Parallelism): 둘 이상의 코어에서 동시에 하나 이상의 프로세스(혹은 스레드)가 한꺼번에 진행되는 것
Multi core는 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순간에 처리할 수 있게 함.