이 프로그램 자체는 실행하기 전에는 코드로 구현한 파일일 뿐이다.
프로그램을 실행되어 사용할 수 있는 무언가가 되는데,
이것이 바로 프로세스이다.
여러가지 프로세스를 사용하고자 한다. (크롬, 카카오톡, 슬랙, vscode, 유튜브 ....등등)
원래 한 프로세스가 실행되기위해서 CPU를 점유하면 다른 프로세스는 실행상태에 있을 수 없다.
즉, 한번에 한 프로세스만 실행가능하다.
하지만 동시에 여러 프로세스를 사용하기 위해서 짧은 텀을 반복하면서 전환하면서 프로세스를 실행하도록한다.
== 마치 여러개의 그림을 붙여 애니메이션을 만들 듯 == 컨텍스트 스위칭
이 컨텐스트 스위칭은 상당히 부하가 많이 들어가는 작업이다.
이에 경량화된 프로세스 버전인 스레드가 등장하게 된다.
경량화? = 하나의 프로세스 안에 다수의 쓰레드가 있을 때, 공유되는 자원이 존재한다. (효율적인 실행)
공유되는 자원이 있기 때문에 컨텍스트 스위칭이 일어날 때, 캐싱 적중률이 올라간다.
즉, 모조리 다 빼고 다시 넣을 필요가 없다.
ex) 회의실 사용
프로세스의 컨텍스트 스위칭:
사용하는 사용자마다 TV, 스피커, 의자 등등 필요한 물품을 각자가 알아서 다 챙겨서 들어오고 가지고 나간다.
스레드의 컨텍스트 스위칭:
사용자는 개인 물품만 가지고 들어오고 필요한 공용 기자재들은 회의실 내부에 구비되어 있다.
프로세스 | 스레드 |
---|---|
1. 운영체제로부터 자원을 할당받은 작업의 단위. 2. 컴퓨터에서 연속적으로 실행되고 있는 프로그램 3. 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스 | 1. 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 2. 하나의 프로세스에 자원을 공유하며, 일련의 과정을 여러개 동시에 실행시킬 수 있도록 하는 것. |
한 애플리케이션에 대한 두가지 다른 처리방식!
ex) 여러 사용자의 로그인 요청
Multi-process
한 프로세스는 매번 하나의 로그인만 처리한다. = 동시에 로그인 처리 불가
따라서 부모 프로세스가 fork()를 해서 자식프로세스를 통해 일을 처리하도록 한다.
이때, 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 된다.
Multi-thread
스레드는 한 프로세스 내에서 구분지어진 실행 단위로,
프로세스 내에서 분리해서 여러 스레드로 실행된다면 그것이 바로 멀티스레드이다.
예를 들어 vscode로 코드를 작성하는 동시에 자동 완성기능이나 맞춤법 확인을 해주는 것처럼
한 애플리케이션에서 작업의 단위가 나누어지는 경우가 많은데, 이때 각각의 스레드가 그 작업들을 분담해서 담당한다.
위의 특징점을 봤을 경우에는 멀티스레드의 장점이 훨씬 많고 좋아보이는데, 멀티 프로세스를 왜 사용할까?
ex) 예전 인터넷 익스플로러를 사용하다가 오류가 발생할 경우에는 창 전체가 꺼지게된다.
(=멀티스레드; 작업이 긴밀하게 연결되어 있어 한탭의 문제가 전체 프로세스에 영향을 준다.)
반면, 구글 크롬은 멀티프로세서를 이용하기 때문에 한개의 탭에 영향이 생겨도 전체 창 전체가 다 꺼지는 경우는 잘 없다.
멀티코어는 멀티프로세스와 멀티스레드와는 조금 다른 관점으로 봐야한다.
멀티프로세스, 멀티스레드는 처리방식의 일종으로 소프트웨어적인 방법이고
멀티코어는 하드웨어의 측면에 가까운 것!