본문 바로가기
프로그래밍/CS

[Computer Science] 프로세스 (Process) 와 스레드 (Thread) 란 무엇인가?

by dev_gyu 2024. 12. 17.
728x90

# 프로그램 (Program)

특정 작업을 수행하기 위한 명령어의 모음으로

프로그램을 실행하는 경우 운영체제는 시스템 메모리로 로드를 하고, 이를 실행한다.

# 프로세스 (Process)

Process 에 대한 이미지

 

CPU에서 실행되고 있는 프로그램이 메모리 상에서 차지하는 공간을 포함한 실행 단위.

프로세스는 하나일수도, 여러 개일수도 있으며 각 프로세스는 메모리와 리소스를 가진다.

이 때, 메모리의 경우 공유하지 않으며 리소스의 경우 서로 공유할 수 있다.

 

메모리 공간의 경우 크게는 텍스트 영역, 데이터 영역, 힙 영역, 스택 영역, 메모리 매핑 영역이 존재하며 각각의 역할은 다음과 같다.

 

1. 텍스트 영역: 실행 코드 저장

2. 데이터 영역: 전역 변수와 정적 변수 저장

3. 힙 영역: 동적 메모리 할당

4. 스택 영역: 함수 호출과 지역 변수 저장

5. 메모리 매핑 영역: 파일이나 장치와 매핑된 메모리 공간

 

이러한 프로세스는 운영 체제에 의해 스케줄링되고 관리된다.

 

# 스레드 (Thread)

Thread 에 대한 이미지

 

프로세스 내에서 실행되는 작은 작업 단위.

하나의 프로세스에는 여러 개의 스레드가 존재할 수 있으며, 스레드는 프로세스와 달리 스레드 간 메모리를 공유한다.

또한 스레드는 CPU 에서 실행되는 실제 작업을 수행하고 자신만의 레지스터와 스택을 가지지만, 프로세스의 주소 공간을 공유한다.

스레드 간의 통신은 프로세스 간 통신보다 효율적이고 빠르다.

 

위와 같은 특성으로 인해 멀티 프로세스 환경에서는 한 프로세스가 종료되어도 다른 프로세스에 영향을 주지 않지만, 멀티 스레드 환경에서는 한 스레드에 문제가 생기는 경우 자원이 공유되고 있음으로 인해 연쇄 작용이 일어나, 다른 스레드에도 영향을 주게 되고 이로 인해 프로세스가 종료가 될 수 있다.

 

흔히 안드로이드 앱 개발을 하다보면 UI Thread 에서 오류가 발생하여 앱이 죽는 경우가 이러한 경우라고 보면 될 것 같다.

728x90