프로세스와 스레드의 차이는 무엇일까?

2023. 2. 21. 20:15Android

갑자기 코딩하다 생각나서 찾아봤다. 개발을 하다 보면 스레드 관리를 하게 된다. 안드로이드의 경우 ui스레드를 제대로 관리를 해줘야 된다. 안 그러면 앱이 터져버리기에 ㅋㅋ.. 매일 보며 사용하는 단어인데 정확한 의미에 대해 모르는 것 같아서 알아보자!!

 

프로세스란

프로세스는 운영체제로부터 메모리, 파일 핸들같은 여러 가지 자원들을 할당받은 독립적인 실행 단위이다. 각각의 프로세스들은 독립적으로 존재하며 각각의 메모리 공간을 소유하며 실행됩니다. 서로 다른 프로세스들은 서로의 공간을 공유하지는 않습니다. 

하지만 프로세스끼리 데이터를 전달하는 상황이 발생하는데 이를 위해 존재하는 2가지 방법이 있는데 하나는 프로세스간 공유 메모리 공간을 할당하는 방법 두 번째로는 메시지를 전달하는 경우입니다.

 

- 프로세스 간 공유 메모리 공간

하나의 메모리 공간을 여러 프로세스들이 공간을 공유한다. 그러면 프로세스간 데이터 공유가 가능해진다 하지만 이러한 방식은 공유 메모리 접근 방식 제어가 필요해 오류 발생이 쉽다.

 

- 메시지 전송

각 프로세스 별 가지고 있는 메세지 큐를 이용해 다른 프로세스에게 데이터를 전달한다. 간단한 구현 방법이고 안정적이다. 하지만 메세지 전송이 느리고 큐 크기의 제한이 있는 문제점이 있다.

 

  • 프로세스 간 통신의 오버헤드가 크다 
  • 프로세스 생성 / 종료에 따른 시스템 호출 오버헤드 

# 오버헤드 - 어떤 일을 처리하기 위한 간접적인 시간을 말한다

 

스레드란

스레드는 프로세스 내부에서 실행되는 실행의 단위이다. 즉, 하나의 프로세스 내에는 여러 개의 스레드를 생성할 수 있으며, 각각의 스레드들은 동일한 자원들을 공유한다. 이러한 스레드를 이용해 우리는 병렬처리를 할 수 있습니다.

  • 스레드는 공유자원을 이용하기에 동기화 문제가 발생한다
  • 하나의 스레드에서 오류가 발생하면 다른 곳에도 영향을 줄 수 있다 
  • 스레드 적절한 수를 지정해 두어야 성능 저하가 오지 않는다.

 

안드로이드 운영체제에는 프로세스와 스레드를 어떻게 사용할까?

 

안드로이드에서는 다양한 애플리케이션을 실행하기 위해 프로세스간 통신인 (IPC) 방식을 이용한다. 다양한 애플리케이션들이 있으면 다수의 액티비티를 가질 수 있는데, 각각의 액티비티는 개별적인 스레드 환경에서 실행되고 이것들은 모두 애플리케이션 별로 하나의 프로세스에서 실행됩니다.

 

스마트폰 - 애플리케이션(여러가지 앱들)별 각각의 프로세스 - 프로세스 별 스레드 

 

( 분명 네트워크 수업에서 배웠던 내용인데 ㅋㅋ.. 기억 흐릿해 새로 정리해 봤습니다)