코린이 탈출기

프로세스(Process) vs 스레드(Thread) 본문

안드로이드 면접 질문/CS 예상 질문

프로세스(Process) vs 스레드(Thread)

50HEE 2022. 5. 19. 11:08

우선 프로세스와 스레드를 설명하기 전에 프로그램에 대해 알아보면 좀 더 쉽게 이해할 수 있습니다.

(저는 처음에 접했을 때 아래 설명을 보면 '~작업의 단위' 이런 식으로 설명이 되어있는데, 이해가 안 가면 그냥 무시하고 실행해주는 아이구나 이런 식으로 공부했습니다.)

 

 

프로그램

프로그램은 파일이 저장 장치에 저장되어 있지만 메모리에 올라가 있지 않은 정적인 상태를 의미합니다.

쉽게 풀면 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해 주지 않아 실행되기 전의 상태를 의미합니다.

그냥 코드 덩어리라고 생각하시면 됩니다. 그저 코드가 있을 뿐 이것을 실행하지 않은 것입니다.

 

 

프로세스

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위를 의미합니다.

프로세스는 정적인 프로그램을 동적으로 만들어 주는 것입니다.

다시 말해, 메모리가 할당되지 않아 실행할 수 없는 프로그램을 메모리를 할당하여 실행하게 하는 것입니다.

 

 

스레드

스레드는 프로세스에서 할당받은 자원을 이용하여 실행하는 단위를 의미합니다.

스레드를 설명하기 전 만약 복잡해진 프로그램에 하나의 프로세스로 동작을 한다면 어떻게 될까요?

그러면 여러 개의 프로세스를 만들면 된다고 생각을 할 수 있는데, 이는 운영체제의 안정성을 위해 자신에게 할당된 메모리 내의 정보만 접근할 수 있게 제약이 있습니다. 그래서 다른 프로세스에서 정보를 접근하려 하면 오류가 발생합니다.

이러한 한계를 해결하기 위해 사용하는 것이 스레드입니다.

다시 스레드의 설명으로 넘어가면 스레드는 프로세스 내에 존재하며 실행하는 단위입니다.

복잡해지는 프로그램 안에서 같은 메모리를 공유해야 하는 상황이 생기면 프로세스와 달리 여러 개의 스레드를 사용하여 동작할 수 있습니다.

이는 프로세스 내에는 여러 개의 스레드를 생성할 수 있다는 것입니다.

 

 

프로세스와 스레드의 메모리 공유

위에서 언급했듯이 프로세스는 메모리를 공유할 수 없지만, 스레드는 가능합니다.

메모리의 종류는 다음 파트에서 참고하세요.

2022.05.24 - [안드로이드 면접 질문/CS 예상 질문] - 메모리 구조

코드, 데이터, 힙, 스택 중 스택을 제외한 메모리를 공유할 수 있습니다.

프로세스는 그럼 불가능한가? 

이를 해결하기 위해 프로세스 간의 의사소통을 위한 IPC(Inter Process Communication)이 있습니다.

이는 참고를 위해 작성하였고 자세한 부분은 나중에 다루겠습니다.

 

 

 

요약

애플리케이션은 하나의 프로세스이고, 그 안에서 분기 처리를 하는 것이 스레드가 됩니다.

프로세스는 메모리를 공유할 수 없으나, 스레드는 스택을 제외한 메모리는 공유가 가능합니다.

'안드로이드 면접 질문 > CS 예상 질문' 카테고리의 다른 글

메모리 구조  (0) 2022.05.24
동기 VS 비동기  (0) 2022.01.12
Comments