프로세스 vs 스레드

itonse·2023년 12월 27일
0

CS 스터디

목록 보기
21/56

1. 프로세스의 개념과 구조

프로세스의 개념에 대해 알아보기 전에 먼저 프로세스와 프로그램의 차이에 대해 알아보겠습니다.

구분프로그램프로세스
형태실행할 수 있는 파일실행중인 프로그램
상태파일이 메모리에 올라가있지 않은 정적인 상태메모리에 적재되고 CPU 자원을 할당받아 실행되고 있는 동적인 상태
이미지



프로세스 구조

Stack 영역

  • 함수 호출 시 생성되는 지역 변수, 매개변수, 반환 주소 등의 임시 데이터를 저장하는 공간입니다.
  • 함수 호출과 함께 생성되고 함수가 반환되면 해제됩니다.
  • 컴파일 시점에 최대 크기가 결정되지만, 실제 사용량은 런타임에 따라 동적으로 변합니다.

Heap 영역

  • 동적으로 할당되는 데이터를 저장하는 공간입니다.
  • 사용자에 의해 동적으로 메모리가 할당됩니다.
  • 런타임 시점에 크기가 동적으로 할당되고 해제됩니다.

Data 영역

  • 전역 변수와 정적(static) 변수가 저장되는 곳입니다.
  • Data 영역의 크기는 정적이지만, 내부에 저장된 변수들의 값은 실행 중에 변할 수 있습니다.
  • 더 세분화하면 초기화된 데이터는 데이터 영역에, 초기화되지 않은 데이터는 BSS 영역에 저장됩니다.

Code 영역

  • 실행할 프로그램의 코드가 저장되는 영역입니다.
  • CPU는 이 영역의 명령어를 순차적으로 가져와 처리합니다.
  • 컴파일 시점에 크기가 결정됩니다.

프로세스 메모리 구조에서 Stack, Data, Code 영역의 크기는 컴파일 시 결정되고, Heap 영역의 크기는 런타임 시 동적으로 할당됩니다.

Stack과 Heap 영역은 동적 메모리 할당이 가능해 두영역 사이에 빈 메모리 공간이 존재하는데, 이 영역은 서로 침범할 수 있습니다.
이로 인해 스택 오버플로(스택이 힙을 침범)나 힙 오버플로(힙이 스택을 침범)가 발생할 수 있습니다.

💡 (참고) 스택, 힙 오버플로우

Stack Overflow: 주로 재귀 호출이 과도하게 발생하거나 지나치게 큰 지역 변수가 할당될 때 발생
Heap Overflow: 동적 메모리 할당이 과도하게 이루어져 사용 가능한 메모리 공간을 초과할 때 발생


2. 프로세스 특징

  • 프로세스는 완전히 독립적인 수행단위라서, 하나의 프로세스에서 발생한 문제는 다른 프로세스에게 영향을 주지 않습니다.
  • 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근이 불가합니다.
  • 이러한 독립성 때문에 프로세스 간 통신을 위해서는 IPC가 사용됩니다.



2. 스레드 개념과 구조


스레드 개념

스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이며, 프로세스에 할당된 메모리와 자원을 공유하며 작업을 수행합니다.

프로세스는 운영 체제로부터 CPU 시간과 같은 자원을 할당받는 더 큰 개념이며, 실제로 CPU에서 작업을 수행하는 것은 프로세스 내부의 스레드들입니다. 그래서 프로세스가 CPU 코어에서 실행되기 위해서는 최소한 하나의 스레드가 필요합니다.

스레드 특징

  • 스레는 프로세스 내에서 각각 Stack과 레지스터를 따로 할당받고, Code, Data, Heap 영역은 공유하게 됩니다.
  • 이러한 스레드의 자원 공유로 인해 한 스레드에서 오류가 발생하면 같은 프로세스 내의 다른 스레드들도 영향을 받을 수 있습니다.
  • 하나의 스레드가 프로세스의 자원을 수정하면, 동일 프로세스 내의 다른 스레드들도 변경된 사항을 바로 확인할 수 있습니다.

💡 스레드마다 별도의 Stack을 할당하는 이유

스레드가 독립적인 함수 호출과 실행 흐름을 유지할 수 있게 하기 위함입니다. 이를 통해, 각 스레드는 다른 스레드의 작업에 영향을 받지 않고 독립적으로 실행될 수 있습니다.


자바 스레드

기술면접에서 흔히 물어보는 스레드는 OS 레벨의 스레드이고, 개발자가 쉽게 접할 수 있는 스레드는 자바 스레드 입니다.

자바 스레드는 JVM(Java Virtual Machine)을 통해 실행되며, JVM은 운영체제 상에서 하나의 프로세스로 작동합니다.

이 자바 스레드들은 OS 레벨의 스레드와 1:1로 매핑되어 실제로 실행되며, 이러한 매핑 덕분에 OS 레벨의 스레드를 간편하게 사용할 수 있습니다.



3. 프로세스 vs 스레드

프로세스는 운영체제로부터 자원을 할당받아 실행하는 독립적인 작업 단위입니다. 각 프로세스는 독립된 메모리 공간(Stack, Heap, Data, Code)을 가지며, 다른 프로세스와 자원을 공유하지 않습니다. 이로 인해 프로세스 간의 통신을 위해서는 별도의 기법인 IPC가 필요합니다.

반면에, 스레드는 프로세스가 할당받은 자원을 이용하여 실행되는 더 작은 단위입니다.
하나의 프로세스 안에서 생성된 스레드들은 프로세스의 메모리 공간(Heap, Data, Code)을 공유하지만, 각 스레드는 고유한 Stack을 가지고 동작합니다. 이 공유된 자원 구조 때문에, 같은 프로세스 안에 있는 스레드들 간에는 데이터 공유가 가능합니다.



4. 멀티 스레드 vs 멀티 프로세스

멀티 프로세스

멀티 프로세스는 하나의 응용 프로그램이 여러 개의 프로세스를 동시에 실행할 수 있게 하는 운영체제의 기술입니다.
ex) 멀티 프로세스 예시: 크롬 브라우저의 멀티 탭

멀티 프로세스 환경에서는 하나의 부모 프로세스가 여러 자식 프로세스를 생성함으로써 다중 프로세스 구조를 형성합니다.

부모 프로세스와 자식 프로세스 모두 고유한 프로세스 ID(PID)를 가지고 있으며, 부모 프로세스는 이 PID를 통해 자식 프로세스들을 관리하고 제어할 수 있습니다.


장점

  • 하나의 프로세스가 에러가 나더라도, 다른 프로세스에 영향을 주지 않아서 프로그램의 안정성을 확보할 수 있습니다.

단점

  • 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지합니다.
  • 독립된 메모리 영역이기 때문에 작업량이 많게되면 Context Switching이 빈번하게 일어나게 되는데, 이 때 오버헤드가 발생할 수 있습니다.
  • 프로세스간에 자원 공유가 필요할 경우 IPC를 사용하는데, 이는 성능 저하나 오버헤드를 발생시킬 수 있습니다.



멀티 스레드

하나의 프로세스 내에는 여러 개의 스레드가 존재할 수 있으며, 이 중 단 하나만 있는 경우를 싱글 스레드라고 하고, 두 개 이상 존재하는 경우를 멀티스레드 구조라고 합니다.

멀티 프로세스의 예로 크롬의 멀티 탭을 들었는데, 멀티 스레드의 예시로는 크롬의 단일 탭 내에서 네트워크 요청 처리, 사용자 인터페이스의 I/O 작업, 자바스크립트 이벤트 루프 관리 등과 같은 다양한 작업들이 여러 스레드에 의해 동시에 처리되는 것을 들 수 있습니다.

장점

  • 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠르다는 장점이 있습니다.
  • 스택 영역을 제외한 메모리 영역을 공유함으로써, 메모리 사용량을 줄이고 자원 활용도를 높입니다.
  • 병렬 처리를 통해 여러 작업을 동시에 처리할 수 있어, 프로그램의 처리 속도와 효율성을 향상시킵니다.

단점

  • 멀티 스레드 구조에서 여러 개의 스레드가 공유 자원에 동시에 접근할 수 있는데, 이때 동기화 문제가 발생할 수 있습니다.
    • Race Condition(경쟁 상태): 여러 스레드가 동시에 같은 자원(예: 메모리, CPU 시간)에 접근하려 할 때 발생하는데, 이는 성능 저하로 이어질 수 있습니다.
    • Dead Lock(교착 상태): 스레드가 동시에 상대방이 사용 중인 자원을 요청하면서 서로가 서로를 기다리는 상태인 데드락이 발생할 수 있는데, 이는 시스템을 멈추게 할 수도 있습니다.
  • 하나의 스레드의 문제가 생기면 해당 프로세스 전체에 영향을 미칠 수 있습니다.

💡 (참고) 멀티 스레드에서 동시 접근 제어: 뮤텍스 사용

멀티 스레드 환경에서 뮤텍스는 공유 자원에 대한 동시 접근을 제어하는 역할을 합니다.
한 스레드가 특정 자원을 사용할 때 다른 스레드의 접근을 차단함으로써, 데이터의 무결성을 보장하고 Race Condition을 예방할 수 있습니다.




ref.
완전히 정복하는 프로세스 vs 스레드 개념
https://8iggy.tistory.com/178
[기술면접] 프로세스
https://girawhale.tistory.com/61
https://easy-code-yo.tistory.com/36
https://www.youtube.com/watch?v=1grtWKqTn50&t=846s
Inpa Dev 멀티 프로세스 vs 멀티 스레드 비교 완전 총정리
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/OS
https://soopeach.tistory.com/252

0개의 댓글