program (명령어, 코드 및 정적인 데이터의 묶음) -> processor(실행) -> process(실행 중인 프로그램)
=> 프로세스가 필요로 하는 재료들이 메모리에 올라가야함
한 프로세스가 cpu를 점유하고 있으면 다른 프로세스는 그 cpu(자원)을 할당 받을 수 없음 => 시분할로 동시성을 가짐
동시성 -> 동시에 실행 되는 것처럼 보이기 위해 실행 단위는 시분할로 cpu를 점유하며 context switching 을 함
(컨테스트 스위칭 => 두 프로세스가 cpu를 번갈아 가면서 할당)
Thread => 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위 (경량화된 프로세스 버전)
=> 이 때 실행 단위는 프로세스(단일 쓰레드를 가지는 프로세스의 경우) 일수도, 쓰레드 일수도 있음
=> 코드 영역, 데이터 영역, 힙 영역을 공통된 자원으로 사용, , 스택 영역은 별도의 영역을 가짐
=> 공유되는 자원이 있기 때문에 캐싱 적중률 올라감 (자원을 효율적으로 사용 가능)
한 애플리케이션에 대한 작업을 동시에 하기 위한 2가지 처리방식
1. 멀티 프로세스
2. 멀티 쓰레드
멀티 프로세서는 독립적인 메모리를 가지고 있음
=> 부모 프로세스가 fork를 통해 자식 프로세스를 여러개 만들어서 일을 처리하는 것
=> 하나의 프로세스 안에 여러 개의 Thread가 존재
멀티 쓰레드는 자원을 공유
차이점
Multi Procees의 경우
Multi Thread의 경우
하드웨어 측면에서 물리적인 코어 갯수를 늘려서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세스가 존재
우아한Tech의 테코톡(코다,쿼리치,김고래님의 Spring vs Spring boot)를 참조하였습니다.