멀티프로세스로 실행할 수 있는것을 왜 멀티스레드로 처리하는가,
멀티스레드와 싱글스레드에 대해서 포스팅하려고 하다가 그전에 스레드와 프로세스가 무엇인지 부터 더 궁금했기에, 이것 먼저 포스팅 해보려고 한다.
프로세스부터 알아보자면
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. @위키백과
즉, 지금 현재 내가 vscode와 크롬브라우저, 브레이브 브라우저까지 3개의 프로그램을 실행중이다. 컴퓨터에서는 이렇게 프로그램이 실행되면 RAM에 해당 프로그램실행에 필요한 메모리를 넣는데, 이것을 프로세스라고 한다.
윈도우 사용자분들은 Ctrl + Alt + Del을 누르면 작업관리자가 뜨는데 여기서 자세히 보기를 하면 프로세스라고하면서 프로그램들이 뜬다
이런 식으로 말이다. (근데 디코도 켜놓고 카카오톡도 켜놨었네..)
프로세스의 특징
스레드가 뭘까?
우선 위키백과의 말을 빌려오자면,
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. @위키백과
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.
스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다. 즉 프로세스를 생성하면 기본적으로 하나의 (메인)스레드가 생성되는 셈이다.
프로세스는 프로그램이 실행되자마자 운영체제로 부터 독립된 메모리 할당을 받는 반면,
스레드는 한 프로세스 내에서 동작되는 흐름으로 프로세스 내에서 Stack 영역만 별도로 할당 받고, 부모 프로세스의 Code, Data, Heap 영역은 공유 한다. 즉, 프로세스내에서 자식 스레드들은 서로 주소 공간이나 자원들을 공유하면서 실행될 수 있다.
스레드는 강하게 연결되어있지만 프로세스는 간단하게 연결되어있다.
이말이 무슨 말이냐면 예시를 들어 설명해보겠다.
우리가 코스요리를 먹을때 스테이크와 케이크가 같이 나온다고 해보자, 그렇다면 스테이크를 어떻게 굽든 케이크에는 영향을 미치지 않는다. 또한, 케이크가 먼저나오고 스테이크가 그 뒤에 나온다고 해도 손님의 취향에 따라서 큰 문제를 일으키지 않는다.
하지만 스테이크의 굽기가 웰던으로 정해져있다면 어떻게 될까?
웰던이라면 고기를 굽는데 시간이 걸리기때문에 채소를 먼저 굽고 고기를 굽게 될 것이다. 이러한 순서가 바뀌면 절대 안된다.
프로세스는 각각의 요리에 예시를 들 수 있고 스레드는 요리 레시피 순서에 예시를 들 수 있다.
프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용
스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용
간단하게 프로세스와 스레드의 차이에 대해서 알아보았다.
어느정도 이해는 했지만 초등학생 친구에게 설명하라고 한다면 조금 막힐 듯 싶다. 좀 더 보완하면서 초등학생 친구들에게까지 설명할 수 있을정도로 공부해보려고 한다.
프로세스는 컴퓨터 내에서 실행되는 카카오톡, discord, Vscode 라는 것을 알았고 스레드는 이 프로세스 안에서 실행되는 흐름 단위라는 것을 알게되었다.