프로세스&스레드 in iOS

장수빈·2025년 6월 13일

CS

목록 보기
7/14

Process와 Thread의 차이점

구분프로세스 (Process)스레드 (Thread)
정의실행 중인 프로그램의 인스턴스프로세스 내에서 실행되는 작업 단위
메모리 영역독립적인 메모리 공간을 가짐같은 프로세스 내의 메모리 공간을 공유
생성 비용높음낮음
통신 방식IPC (Inter-Process Communication) 필요공유 메모리로 직접 접근 가능
예시카카오톡 앱, 사파리 앱 등UI 업데이트 스레드, 백그라운드 다운로드 스레드

iOS에서 프로세스와 스레드 관리 방법

  • iOS에서는 앱마다 기본적으로 하나의 프로세스만 할당
  • 앱 내에서 여러 작업을 병렬로 처리할 필요가 있을때, 스레드(혹은 GCD기반 큐) 사용
  • iOS는 GCD와 OperationQueue로 스레드 관리를 추상화 하여 효율적 처리

하나의 앱에서 여러 프로세스를 사용하는 경우는 없는가?

  • 거의 없다. 대부분의 iOS앱은 하나의 프로세스 내에서 실행되며, 필요한 작업을 스레드를 통해 분산처리
  • 예외적으로, App Extension(ex Widget, Siri Extension)은 별도의 프로세스로 실행

왜 스레드를 주로 사용하는가?

  • 스레드는 프로세스보다 생성 및 관리 비용이 낮고, 메모리 공유가 가능하기 떄문에, 리소스 효율성 높음

멀티 스레딩은 왜 필요한가?

  • UI응답성과 성능 향상을 위해 필요
  • 사용자의 입력, 애니메이션, 스크롤 등에 영향을 주지않고 무거운 작업(ex 네트워크, 디스크 I/O, 이미지 처리 등)을 위해 백그라운드 스레드에서 처리해야함

메인 스레드에서 시간이 오래 걸리는 작업을 처리하면 어떤 문제가 생길까?

  • 앱이 Freezing된것 처럼 보이고, 응답없음(App Not Responding, ANR)으로 이어질 수 있음
  • iOS는 UI 관련 작업은 반드시 Main 스레드에서만 실행되어야 하기 때문에 긴작업이 있을 시 전체 UI가 멈춤

GCD(Grand Central Dispatch)란?

Apple에서 제공하는 멀티스레딩 처리 프레임워크로
개발자가 직접 스레드를 만들 필요 없이
Queue에 작업을 등록하면, 시스템이 적절한 스레드에서 실행

주요 기능

  • Serial / Concurrent Queue
  • async / sync 작업
  • QoS(Quality of Service) 설정
  • 메인 스레드 호출 등

GCD없이 스레드를 작접 생성/관리 한다면?

문제점설명
복잡한 동기화여러 스레드 간 데이터 공유 시 race condition 발생 가능
스레드 수 제한 관리 어려움스레드가 너무 많아지면 오히려 성능 저하
메모리 및 리소스 누수 위험생성된 스레드가 적절히 종료되지 않으면 문제 발생
iOS는 앱의 리소스를 제한함직접 만든 스레드는 iOS의 리소스 제한 정책에 맞지 않을 수 있음

GCD의 DispatchQueue 종류와 사용 목적

  • Serial Queue(직렬 큐)
    - 한 번에 하나의 작업만 실행
    - 작업 순서를 보장하고 싶을 때 사용
let serialQueue = DispatchQueue(label: "com.example.serial")
serialQueue.async {
 // 순차 실행
}
  • Concurrent Queue (동시 큐)
    - 여러 작업이 병렬로 동시 실행
    - 순서 보장 필요없을 때, 성능 극대화 목적
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)
concurrentQueue.async {
// 동시 실행
}

시스템 큐

큐 이름설명
DispatchQueue.mainMain 스레드(UI 처리 전용)
DispatchQueue.global()전역 concurrent queue (QoS 별로 선택 가능)
profile
iOS 공부 이모저모 낙서장

0개의 댓글