프로세스와 스레드

_dodo_hee·2023년 6월 27일
0

핸드북

목록 보기
16/29
post-thumbnail

프로세스 스레드

프로그램 (Program)

파일이 저장 장치에만 저장되어 있고, 메모리에는 올라가 있지 않은 정적인 상태를 의미한다.

프로그램은 쉽게 말해 코드 덩어리.

특징

모든 프로그램은, 운영체제가 해당 프로그램을 위한 메모리 공간을 할당한 뒤, 자원을 할당해줘야 실행할 수 있습니다.

ex) 윈도우 프로그램, 맥 프로그램 같이 컴퓨터에서 실행 할 수 있는 파일.
아직 실행하지 않은 상태라서, 정적 프로그램(static Program) 이라고 부르기도 한다.

정적프로그램

프로세스 (Process)

운영체제로부터 자원을 할당 받은 작업의 단위를 의미한다.

프로그램이 실행 된 상태를 의미한다.
그래서 컴퓨터에서 현재 실행되고 있는 프로그램을 의미한다.

윈도우는 작업관리자를 열어보면 프로세스에 나오는 게 실행되고 있는 프로그램.
맥은 응용 프로그램 강제 종료 열어보면 실행되고 있는 프로그램.

들이 프로세스이다.

프로세스

모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행이 가능하다.
(그래서 컴퓨터 살때 메모리공간이 중요하지...)

동작

  1. 프로그램을 실행하는 순간, 파일은 컴퓨터의 메모리에 올라감.
  2. 운영체제로부터 CPU를 할당받아 프로그램 코드를 실행
  3. 서비스 이용 가능.

특징

  1. 프로세스는 독립된 메모리 영역을 할당 받는다.
  2. 프로세스당 최소 1개의 메인 스레드를 가지고 있다.
  3. 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 할 수 없다.
  4. 프로세스간의 자원에 접근하려면, 프로세스 간의 통신(IPC, inter-process communication)을 사용해야한다. ex) 소켓, 파일, 파이프

구조

프로세스구조

Code

프로그래머가 작성한 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있는 곳

Data

코드가 실행되면서 사용하는 전역 변수나 각종 데이터를 저장하는 곳

Stack

지역 변수와 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간

Stack은 함수의 호출과 함께 할당!
되며, 함수의 호출이 완료되면 소멸된다.

Heap

생성자, 인스턴스와 같은 동적으로 할당되는 데이터들을 위해 존재하는 공간

사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

스택 공간 늘어날 수 잇음

스레드

프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위

크롬 브라우저가 실행되면 프로세스 하나가 생성.
우리는 브라우저파일에서 파일 다운도 받고, 온라인 쇼핑도 하고, 게임도 한다.

즉, 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행되기 때문에 가능하다.
작업의 흐름들을 스레드라고 하고, 여러개가 있다면 멀티 스레드라고 부른다.

배경

우리는 프로세스 작업을 하나만 실행하면서 컴퓨터를 사용하지 않는다.
ex) 카톡하면서 크롬 쓰기 / vscode 쓰면서 postman 쓰기

하지만, 과거에는 파일을 다운 받으면 실행 시작부터 실행 끝까지 프로세스 하나만을 사용했어서 다운이 완료 될때까지 하루종일 기다렸다.
but, 똑같은데 여러 개의 프로세스로 만들면, 메모리 차지 ⬆️ CPU에서 할당 받는 자원이 중복된다.

이런 프로세스의 특성의 한계를 해결하기 위해 스레드가 등장했다.

특징

  1. 프로세스 내에서 Stack 만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.
  2. 한 프로세스 내에서 동작 되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  3. 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
  4. 각 스레드는 별도의 레지스터와 스택을 갖지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  5. 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 변경 결과를 즉시 볼 수 있다.

프로세스의 메모리 영역들 중에 스레드는 stack만 할당받아서 복사하고,
code, data, heap은 프로세스 내의 다른 스레드 들과 공유된다.
각 스레드는 별도의 stack을 가지지만, heap 메모리는 고유해서 서로 다른 스레드에서 가져와 읽고 쓸 수 있게 된다.

스레드 구조

자바스크립트는 함수별로의 메모리를 가지기 때문에, 충돌 날 일이 없다.

정리

프로그램 : 코드 덩어리
프로세스 : 작업의 단위
스레드 : 실행 흐름의 단위

profile
무럭무럭 자라나는 도도 개발성장일기

0개의 댓글