프로세스와 스레드

김석진·2023년 4월 11일
0
post-custom-banner

프로세스

프로세스란?

프로세스는 실행 중인 프로그램이며 작업의 단위이다
여기서 프로그램이 실행 중이라는 것은 디스크에 저장되어 있던 프로그램을 메모리에 저장한 뒤 운영체제의 제어를 받을 수 있는 상태가 된 것을 의미한다

프로세스 메모리 구조

프로세스에 메모리 구조는

  • stack
  • heap
  • code(text)
  • data

이렇게 4가지 영역으로 구성된다
이러한 주소 공간을 우리는 가상 메모리 또는 논리적 메모리라고 부른다

그럼 하나씩 알아보자

Stack

Stack 영역은 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간이다

Stack 특징

  • 후입선출(LIFO, Last-In-First-Out) 구조
  • 고정 크기 할당

Heap

필요할 때마다 사용하는 메모리 영역

Heap 특징

  • 크기가 동적으로 변할 수 있다
  • 임의의 위치에 데이터가 저장될 수 있다

Code

Code는 실행 파일에 저장된 프로그램 코드가 저장되는 영역이다

Code 특징

  • 읽기 전용이다
  • 메모리 공간을 절약할 수 있다

Data

전역 변수와 정적 변수, 배열, 구조체 등이 저장된다

Data 특징

  • 초기화된 데이터와 초기화되지 않은 데이터로 구분된다
  • Stack과 Heap보다 큰 메모리 공간을 사용한다
  • 전역 변수와 정적 변수가 저장된다

스레드

스레드란?

스레드란 프로세스 내에서 실행되는 흐름의 단위를 의미한다

일반적으로 하나의 프로그램은 하나의 스레드를 가지고 있지만, 프로그램의 환경에 따라 다수의 스레드를 동시에 실행할 수 있으며 이러한 실행 방식을 멀티스레드라고 한다

스레드 장점

  • 높은 처리량: 다수의 스레드를 활용하여 동시에 작업을 처리함으로써 전체 시스템의 처리량을 향상시킬 수 있다
  • 빠른 응답성: 사용자 인터페이스와 같이 대화형 응용 프로그램에서는 스레드를 사용하여 응답성을 향상시킬 수 있다
  • 자원 공유: 스레드는 같은 프로세스 내에서 실행되기 때문에 프로세스 내부의 자원(데이터, 메모리 등)을 공유할 수 있다
  • 경제성: 프로세스 생성보다 스레드 생성이 비용이 적게 든다
  • 멀티태스킹: 다중 스레드를 사용하여 다중 작업을 처리할 수 있다

스레드 단점

  • 동기화 문제: 스레드들은 프로세스 내부의 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다
  • 교착 상태: 둘 이상의 스레드가 서로 다른 자원을 점유한 채로 대기하는 상태가 되는 교착 상태(deadlock)가 발생할 수 있다
  • 코드 복잡성: 스레드를 사용하면 동시에 실행되는 코드를 작성하기 때문에 코드가 복잡해질 수 있다
  • 안정성: 스레드는 공유 자원에 대한 경쟁 조건으로 인해 예기치 않은 동작이 발생할 수 있다
  • 디버깅 어려움: 스레드를 사용하면 하나의 문제가 여러 스레드에 영향을 미칠 수 있기 때문에 디버깅이 어려울 수 있다
profile
해탈의 경지에 이르자
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 5월 20일

우왕석짅님정말대단해요!!

답글 달기