다디와 괴발개발

프로세스, 스레드, 멀티 스레드 (feat. 크롬) 본문

DevOps/Linux

프로세스, 스레드, 멀티 스레드 (feat. 크롬)

아임다디 2022. 3. 15. 23:17

프로그램과 프로세스

우리가 평소에 쉽게 접하는 용어인 프로그램은 어떤 의미일까?

프로그램은 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 수행절차를 표현해놓은 명령어들의 집합. 즉, 컴퓨터에서 어떤 작업을 실행하기 위한 코드, 정적 상태의 파일이라고 할 수 있다.

그렇다면, 프로세스는 무엇일까?

프로세스컴퓨터에서 실행되고 있는 프로그램을 뜻한다.

사용자가 프로그램을 실행하면, 운영체제가 실행에 필요한 메모리를 할당 받아 프로그램 코드를 실행하는 방식이다.

그렇다면 다중 프로세스는?

하나의 프로그램이 여러 프로세스를 만드는 것이다.

이때 각각의 프로세스는 독립된 메모리 영역을 할당 받고, 서로의 변수나 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하려면 IPC(Inter-Process Communication)을 사용해야 한다.

스레드

스레드는 코드가 실행되는 하나의 흐름을 말한다.

즉, 한 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 개가 생긴 것이고 이 때 멀티 스레드라고 한다.

스레드는 프로세스 내에서 각각 Stack 영역만 따로 할당 받고, 프로세스의 Code, Data, Heap 영역은 모든 스레드가 공유하게 된다.

따라서 한 스레드가 프로세스 자원을 변경하면, 다른 스레드에도 영향을 미치게 된다.

멀티 스레드 환경을 개발하면서 많이 들을 수 있는데, 멀티스레드를 사용하여야 될 때는 대용량 데이터 처리 시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하거나, 여러 클라이언트의 요청을 처리하는 서버 개발시에 사용할 수 있다.

멀티태스킹과 멀티 프로세스와 멀티 스레드

멀티 프로세스와 멀티 스레드를 비교하기 전에, 멀티 태스킹이라는 단어를 알아보자. 

멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 의미하며, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행하는 것을 말한다.

예를 들어, 워드로 문서 작업을 하면서 크롬 브라우저로 유튜브에서 영상을 같이 볼 수 있는 것과 같다.

멀티 프로세스와 멀티 스레드는 어떻게 멀티 태스킹이 진행된다고 할 수 있을까???

멀티 프로세스 : 애플리케이션 단위의 멀티 태스킹
멀티 스레드 : 애플리케이션 내부의 멀티 태스킹

크롬은 멀티 프로세스? 멀티 스레드?

크롬에서는 여러 탭을 생성하여 브라우저를 띄울 수 있다. 이 탭은 멀티 프로세스일까? 멀티 스레드일까?

답은 크롬은 멀티 프로세스이다.

즉, 한 개의 탭당, 한 개의 프로세스이며 각 메모리 영역이 독립적으로 할당된다. 프로세스간에는 메모리 영역을 침범하지 않으므로 한 개의 탭이 강제 종료된다고 하더라도 다른 탭(프로세스)에는 영향을 미치지 않는다.