스레드: 한 프로세스 에서 멀티 스레드로 여러가지 일을 동시에 처리할 수 있음
멀티 프로세스: 한 작업을 멀티 프로세스로 동시에 처리할 수있음
키워드
1.실행단위 - cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념(한순간에 한개씩 적재되는 것)2.프로세스 - 하나의 스레드만 가지고 있는 단일 스레드 프로세스
3.동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
피자집에 가서 피자를 시켰는데 피자 레시피가 적힌 종이를 줬다.
여기서 피자 레시피가 우리가 열심히 구현하고 있는 코드 파일(프로그램)이다.
(프로그램을 실행시키 전까지는 그저 코드가 구현되어 있는 파일이다)
이것을 사용하기 위해서는 레시피가 피자가 되는 것처럼 실행이 되어서 사용할 수 있는 무언가가 되어야 하는데 그것이 프로세스
이다.
프로그램이 프로세스가 되면서 2가지 일이 일어나는데
일단 프로세스가 필요로 하는 재료들이 메모리에 올라간다.
두번째로 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭이 만들어진다.
코딩할때 사람들은 여러가지 프로세스를 이용한다.
원래 한 프로세스가 실행되기 위해서 cpu를 점유하고 있으면 다른 프로세스는 실행상태에 있을 수가 없다.
그래서 다수의 프로세스를 동시에 실행하기 위해 여러 개 프로세스를 시분할로, 즉 짧은 텀을 반복하면서 전환해서 실행 시키도록 한다.
컨테스트 스위칭은 아주 귀찮고 복잡하다
그래서 등장한것이 경랑화된 프로세스 번전인 스레드
이다
왜 경량화된 프로세스냐면 하나의 프로세스 안에 다수의 쓰레드가 있을 때 공유되는 자원 있기 때문이다
(코드, 데이터, 힙)스택 부분만 따로 가지고 있음
굉장히 효율적이다 공유되는 자원이 있기 때문에 이전처럼 컨텍스트 스위칭이 일어날 때 캐싱 적중률이 올라간다.
한 어플리케이션이 여러가지 일을 처리할 때가 있다.
예를 들어서 여러 사용자가 로그인을 요청하는 상황이 있을때.
한 프로세스는 매번 하나의 로그인만 처리할 수 있기 때문에 동시에 처리x
이 때 부모 프로세스가 fork를 해서 자식 프로세를 여러 개 만든다.
이 때 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 된다.
스레드는 한 프로세스 내에서 구분지어진 실행 단위
만약에 프로세스가 다수의 스레드로 구분되어 있지 않으면 단일스레드 하나로 프로세스가 실행이 된다.
이때 실행단위는 프로세스 그 자체가 되는것
더 자세히 말하면 해당 프로세스의 하나밖에 없는 쓰레드가 실행 단위가 되는 것
프로세스 내에세 분리해서 여러 스레드로 나뉘어서 실행단위가 나뉘어지면 그게 멀티스레드가 된다.
인텔리제이를 사용하면서 내가 코드를 수정하는 동시에 인텔리제이에서 추천 코드도 보여주고, 테스트도 돌리는 동시에 소스코드를 수정해야 될 때도 있음 이렇게 한 어플리케이션에 대한 작업의 단위가 나누어질 때가 많은데 이때 각각의 쓰레드가 그 작업들을 담당하는 것이다
차이점
이렇게 보면 멀티프로세스 보다 멀티스레드가 훨씬 더 좋아 보이는데 왜 멀티 프로세스를 이용할까?
예전에 인터넷 익스플로러를 사용하다가 이런 에러가 뜬 적이 있다.
이것을 멀티스레드를 이용했기 때문이다.
긴밀하게 연결되어 있기 때문에 한 스레드, 한 탭에 문제가 생기면 전체 프로세스의 영향이 간다.
반면 구글 크롬은 다소 비효울적인 부분이 있을 수 있지만 멀티프로세스를 이용하기 때문에 멀티탭 간의 영향을 덜 받는다.
멀티코어(하드웨어 측면에 가깝다)<스레드 프로세스는 소프트웨어>
멀티코와 관련된 키워드는 동시성
과 병렬처리
동시성
싱글 코어를 가진 cpu가 실행단위를 처리할 때 동시에 여러가지가 진행되기 위해서 빠른 텀으로 전환이 되면서 실행이 된다 이 개념이 동시성
이렇게 여러 실행 단위를 번갈아 실행하면서 동시에 일어난 것처럼 보이게 하는 것
병렬처리
하지만 멀티 코어는 병렬처리, 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한 순간에 처리할 수 있게 해준것
다수의 프로세스로 여러 가지 일을 각 코어에서 진행