티스토리 뷰

스프링의 핵심원리

Thread vs Process

✨✨✨✨✨✨✨ 2023. 4. 4. 15:37
반응형

키워드

  1. 실행단위 : cpu core에서 실행하는 하나의 프로세스와 스레드를 포괄하는 게념
  2. 동시성 한순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일이 동시에 처리하는 것처럼 보이는 것

순서

  1. Process vs Thread
  2. Multi-process vs Multi-thread
  3. Multi-core
  4. 요약

프로그램(Program)이란

파일 시스템에 존재하는 실행파일입니다. 소스코드가 등록된 실행 파일입니다.

ex) Hwp.exe, MapleStory.exe 등

 

프로세스(Process)란?

프로그램을 실행시키는 주체

프로그램은 그저 하나의 소스코드에 지나지 않았다, 하지만 실행되어서 사용할 수 있는 무언가가된다면 그것이 바로 프로그램이다.

 

다음과 같이 프로그램은 바탕화면에 있는 Chrome.exe이고,

 

 

Program이 RAM(Memory)에 적재되어 올라가면 이를 Process라고 합니다.

 

 

 

미리 알면 좋은 Process 지식

 

Program은 HDD에 적재되어있다가 실행 시, RAM Memory에 올라가게 됩니다.

이때, [Code, Data, Heap, Stack] 4가지 영역으로 구분지어 RAM에 적재되게됩니다.

 

그렇다면 Multi Process와 Multi Thread가 필요한 이유가 뭘까요?

우리는 유튜브 노래를 들으며 Intellij로 코드를 작성하며, 카카오톡으로 메신저를 주고받습니다.

이때, 한 프로세스가 실행(카카오톡)되면 유튜브 노래와 itellij가 실행이 멈추게 됩니다.

그렇기에 다수의 프로세스를 실행하기 위해 짧은 텀을 반복해서 전환하면서 실행되며 이 행위가 컨텍스트 스위칭입니다. 또한 이 기능이 구현 가능한것이 바로 Multi Process입니다.

좀 더 자세히 들어가보면,

 

Multi-Process의 경우,

[PCB_1]와 [PCB_2]가 Context Switching이 반복되면서 CPU에 적재되었다가 내려가고있습니다.

이 작업은 굉장히 피곤하고 힘든 작업입니다.

 

그렇기에 경량화된 Multi-Process인 Multi-Thread가 나옵니다.

경량화 되었다고 표현할것일까요?

 

 

바로 공유되고있는 자원이 있기 때문입니다.

그렇기 때문에 위 그림처럼 컨텍스트 스위칭 시에 모조리 PCB_2를 다 빼고 PCB_1을 다넣을 필요가 없습니다.

공유되는 자원은 [Code, Data, Heap, Stack]중에 주황색으로 표시된 3가지입니다.

이렇게 되면 Multi-Thread의 Context-switching은 훨신 부담이 적고 가벼운 작업이 되겠죠?

 

참고할점은, Multi-Process와 Multi-Thread는 한 App를 처리하기 위한 방법들입니다.

 

다시 살펴보면,

Multi-Process의 경우는 RAM에 올라온 부모 Process를 [Code, Data, Heap, Stack]를 모두 fork 하여 새로운 자식 Process를 생성하고 공유되는 자원 없이 메모리에 적재합니다.

 

차이점을 비교해서 정리하면 다음과 같습니다.

Multi-Process Multi-Thread
각 프로세스는 RAM 메모리를 독립적 하나의 프로세스로 Code, Data, Heap영역이 공유되며 각 Stack영역이 이루어져, Threa가 긴밀하게 연결되어있다.
전체를 fork하여 사용한 통신 공유된 자원으로 통신 비용 절감
자원이 소모적이며 개별적 메모리 차지 공유된 자원으로 메모리 효율 증가함
Context-Switching 비용 큼 Context-Switching 비용 작음
동기화 작업 필요X 공유되는 자원 관리가 필요 (ex, static Method 등)

 

그렇다면 Mult-thread가 훨씬 좋아보이는데 왜 Multi-Process를 이용하는 걸까요?

여러개의 익스를 사용하여 Tab을 여러개 켜놓고 사용하면 오른쪽과 같은 화면을 보신적이 있을겁니다.

이것이 Multi-Thread를 사용할 경우 최대 단점입니다.

자원을 공유하여 사용하기 때문에 하나의 Tab에 문제가 생기면 전체 App실행에 문제가 생기게됩니다.

반면 Chrome의 경우 여러 탭 실행 중 문제가 생겨도 다른 Tab에는 영향을 덜받게됩니다.

 

여기서 잠깐 Multi core는 무엇일까?

간단하게 살펴보자면 Multi-Process와 Multi-thread는 context-switching이 일어나면서 동시에 일을 처리할 수 있는것처럼 보인다.

하지만 Multi-core의 경우 진짜 프로세스 혹은 쓰레드를 동시에 처리하는것이다.

 

 

여기서 잠깐, 재미있는 내용이 있어 더 정리하고자 합니다!!

 

위에서 설명했다시피 App실행할 경우 **[Code, Data, Heap, Stack]**이 RAM에 올라간다고 적재된다고 했는데

왜 Heap(동적 메모리)영역과 Stack(지역변수, 매개변수, 함수)영역 사이에 공간이 있는걸까요?

 

바로, 함수가 함수를 재귀적으로 호출하며 Heap과 Stack의 Memory가 늘어날 수 있기 때문에 공간이 존재하는 것입니다.

그래서 Stack이 Heap영역을 침범하면 StackOverFlow라고 하고,

Heap이 Stack영역을 침범하게되면 HeapOverFlow라고 합니다.

영역이 겹치게 되면 각 변수가 훼손됩니다.

 

 

위 내용은 이전 nuxt실행 후 많은 내용을 실행하면 아래와 같은 오류를 접하면서 관리자 페이지가 동작 안했습니다.

원인은 메모리 영역을 1024로 잡아주었기에 heap out of memory 오류가 발생하였습니다.

하여, node --max-old-space-size=8192 를 변경해줌으로써 메모리 영역을 늘려 오류가 해결되었습니다.

"dev": "node --max-old-space-size=8192 node_modules/nuxt/bin/nuxt.js --dotenv .env.development --port 7776",

 

 

 

 


해당 10분 테크톡을 바탕으로 정리한 내용입니다!!

 

https://www.youtube.com/watch?v=sZk4A-wjpBE

테크톡🎤 Process와 Thread - 이수형(3기)

https://www.youtube.com/watch?v=1grtWKqTn50

🌷 코다의 Process vs Thread

 

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함