본문 바로가기

앱 개발/Kotlin_Android

Process, Thread

- Process (프로세스)

  • 정의: 프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립된 메모리 공간을 갖고 실행된다.
  • 메모리: 프로세스는 각각 독립적인 주소 공간(코드, 데이터, 힙, 스택)을 갖는다.
  • 자원 할당: 프로세스는 운영 체제에 의해 독립적으로 자원을 할당받는다.
  • 통신: 프로세스 간의 통신은 IPC(Inter-Process Communication) 메커니즘을 통해 이루어진다. 여기에는 파이프, 소켓, 메시지 큐 등이 포함된다.
  • 오버헤드: 프로세스 간의 문맥 전환에는 상대적으로 큰 오버헤드가 발생한다.
  • 독립성: 한 프로세스의 문제는 다른 프로세스에 영향을 주지 않는다.

 

- Thread (스레드)

  • 정의: 스레드는 프로세스 내에서 실행되는 작은 실행 단위이다. 여러 스레드는 하나의 프로세스 내에서 병렬적으로 실행될 수 있다.
  • 메모리: 같은 프로세스 내의 스레드는 코드, 데이터, 힙을 공유하지만 각자 고유의 스택을 갖는다.
  • 자원 공유: 스레드는 같은 프로세스 내에서 자원을 공유하므로 데이터 공유가 쉽고 효율적이다.
  • 통신: 스레드는 같은 프로세스 내에서 실행되기 때문에 스레드 간 통신은 공유 메모리를 통해 이루어진다.
  • 오버헤드: 스레드 간의 문맥 전환은 프로세스보다 훨씬 적은 오버헤드가 발생한다.
  • 문제 발생 시 영향: 한 스레드의 문제는 같은 프로세스 내의 다른 스레드에 영향을 미칠 수 있다.

 

- 차이점

  1. 독립성:
    • 프로세스: 독립적인 실행 단위이므로 다른 프로세스와 자원을 공유하지 않음
    • 스레드: 같은 프로세스 내에서 자원을 공유하여 실행
  2. 메모리 구조:
    • 프로세스: 각 프로세스는 독립된 메모리 공간(주소 공간)을 가짐
    • 스레드: 같은 프로세스 내의 스레드는 공유된 메모리 공간을 사용
  3. 자원 할당:
    • 프로세스: 운영 체제에 의해 독립적으로 자원을 할당받음
    • 스레드: 같은 프로세스 내에서 자원을 공유
  4. 오버헤드:
    • 프로세스: 프로세스 생성 및 문맥 전환에는 큰 오버헤드가 발생
    • 스레드: 스레드 생성 및 문맥 전환은 상대적으로 적은 오버헤드가 발생
  5. 통신 방식:
    • 프로세스: IPC(파이프, 소켓 등)를 통해 통신
    • 스레드: 공유 메모리를 통해 직접 통신
  6. 안전성:
    • 프로세스: 하나의 프로세스가 종료되더라도 다른 프로세스에는 영향을 미치지 않음
    • 스레드: 하나의 스레드에서 문제가 발생하면, 같은 프로세스 내의 다른 스레드에 영향을 미칠 수 있음

 

- 요약

  • 프로세스는 독립적인 실행 단위로서 강력한 격리와 독립성을 제공한다.
  • 스레드는 경량 실행 단위로서 같은 프로세스 내에서 자원을 공유하며 더 효율적인 통신과 실행을 제공한다.
728x90

'앱 개발 > Kotlin_Android' 카테고리의 다른 글

DTO, DTA, Entity  (0) 2024.06.21
무한 스크롤 기능 구현  (0) 2024.06.19
MVVM 패턴 사용 이유  (0) 2024.06.11
Android 4대 컴포넌트  (0) 2024.06.07
API 사용하여 동영상 가져오기  (0) 2024.06.05