실행단위
CPU core에 한 순간에 하나씩(one at a time) 적재되어 실행되는 단위
Process와 Thread를 모두 포괄한다
프로세스
하나의 스레드만 갖고 있다면 단일 스레드 프로세스
동시성
한 순간에 여러가지 X
짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
프로그램은 단순히 코드가 구현된 파일일 뿐이다.(= 피자 레시피)
피자 레시피로 피자를 만들듯이 프로그램을 실행해 사용할 수 있도록 메모리에 적재된 것이 프로세스이다.
프로세스가 필요로 하는 자원이 메모리에 올라간다.
메모리에는 code, data, heap, stack 영역이 있다.
프로세스 정보를 담고 있는 PCB 블럭이 프로세스 생성과 함께 만들어진다.
코드 치려고 VSCode 실행,
코드 치면서 음악 들으려고 Youtube Music 실행,
메신저로 Slack 실행,..... 어떻게 동작하는지??
2개의 프로세스를 예시로 든 컨텍스트 스위칭의 예시
각 프로세스가 짧은 전환주기를 갖고 실행, 준비 상태를 오가며 메모리 적재, 보관을 반복한다
이렇게 동작하는 프로세스를 경량화한 것이 스레드이다.
한 프로세스 내에서 구분지어진 실행단위이다.
한 개의 프로세스 안에 다수의 스레드가 있을 때,
스레드는 code, data, heap 영역을 공통된 자원으로 사용한다.
공유되는 자원이 있기 때문에 컨텍스트 스위칭에서도 모든 것을 넣고 뺄 필요가 사라진다.
<예시>
악기 연주실을 대여해 이용한 후 다음 팀을 위해 자리를 비워줄 때,
컨텍스트 스위칭은 모든 악기와 장비를 다 빼내고 다음 팀이 다시 모든 악기와 장비를 들여오는 식이다.
하지만 스레드의 경우 설치된 악기와 장비는 그대로 두고, 직접 휴대하는 악기(기타)만 가지고 들어와 연결해 사용하는 식
두 가지 모두 한 어플리케이션에 대한 처리방식의 일종이다.
멀티 프로세스는 두 사람이 각기 다른 공간에서 작업하는 것과 같다.
멀티 스레드는 두 사람이 같은 공간에서 작업하는 것과 같다.
멀티코어는 멀티 프로세스, 멀티 스레드와 달리 하드웨어 측면에 가깝다.
짧은 시간에 cpu의 시간을 분할해 여러 실행단위를 번갈아 실행하면서 마치 동시에 실행되는 것처럼 보이게 하는 것
물리적으로 여러 코어를 두고 다수의 실행단위를 동시에 처리할 수 있게 하는 것