dev._.note

[Swift] 스레드(Thread) 본문

Dev/SWIFT

[Swift] 스레드(Thread)

Laena 2023. 12. 14. 21:37

📌 스레드(Thead)란?

스레드(Thread)는 동시에 여러 작업을 수행하기 위해 사용되는 실행 단위로써 스레드를 사용하면 여러 작업을 병렬로 실행하여 프로그램의 성능을 향상할 수 있음.

스레드의 개념

스레드는 각각의 독립적인 실행 경로를 가지며, 동시에 여러 코드 블록을 실행할 수 있음.
각 스레드는 자신만의 스택 영역을 가지고 있으며, 프로그램의 다른 부분과 독립적으로 실행.

 

스레드의 동작 방식

  1. 메인 스레드(Main Thread) : 모든 iOS 앱은 메인 스레드에서 실행. 사용자 인터페이스(UI) 이벤트 처리, 그리기 작업 등을 메인 스레드에서 처리.
  2. 백그라운드 스레드(Background Thread) : 메인 스레드 외의 스레드를 백그라운드 스레드라고 함. 복잡한 계산, 다운로드 등의 작업은 백그라운드 스레드에서 수행.

스레드 사용

GCD(Grand Central Dispatch)를 사용하여 스레드를 처리. 

DispatchQueue.global().async {
    // 백그라운드 스레드에서 실행할 작업
}

DispatchQueue.main.async {
    // 메인 스레드에서 실행할 작업
}

DispatchQueue.global().async는 백그라운드 스레드에서 비동기적으로 작업을 실행. 

DispatchQueue.main.async는 메인 스레드에서 비동기적으로 작업을 실행.


스레드 동기화

여러 스레드가 동시에 데이터에 접근하면 문제가 발생할 수 있는데 이를 스레드 동기화(Thread Synchronization)라고 함.

스레드 동기화를 위해 Swift는 @synchronized 키워드를 제공.

class ThreadSafeClass {
    private var value: Int = 0
    private let lock = NSObject()

    func increment() {
        objc_sync_enter(lock)
        value += 1
        objc_sync_exit(lock)
    }

    func getValue() -> Int {
        objc_sync_enter(lock)
        let currentValue = value
        objc_sync_exit(lock)
        return currentValue
    }
}

private var value는 여러 스레드가 접근할 수 있는 공유 변수. 

objc_sync_enter와 objc_sync_exit 함수를 사용하여 임계 구역을 지정하고, 동시에 접근하는 것을 방지.


스레드를 사용하여 동시성 프로그래밍을 구현할 수 있음.

이를 통해 프로그램의 성능을 향상시키고 여러 작업을 병렬로 실행할 수 있으며 스레드 동기화를 통해 여러 스레드가 동시에 접근하는 공유 변수에 대한 문제를 해결할 수 있음.

 

apple 공식문서

 

The Swift Programming Language: Redirect

 

docs.swift.org

 

'Dev > SWIFT' 카테고리의 다른 글

[Swift] 동기와 비동기  (0) 2023.12.18
[Swift] 강한 참조 순환 문제와 해결방법  (1) 2023.12.15
[Swift] 프로토콜(Protocol)  (0) 2023.12.13
[Swift] ARC(Automatic Reference Counting)  (0) 2023.12.12
[Swift] 예외처리  (0) 2023.12.11