Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 배열 만들기1
- 문자열 붙여서 출력하기
- 프로그래머스 배열 만들기1
- 프로그래머스 문자열 정렬하기 (1)
- 프로그래머스 최댓값 만들기(2)
- 프로그래머스 n의 배수 고르기
- cocoapods 설치 오류
- 프로그래머스 문자열 붙여서 출력하기
- 스페인어
- 객체지향
- 연산자
- 프로그래머스 자동커밋
- continue
- 스파르타코딩캠프
- 프로그래머스 n번째 원소까지
- Til
- n번째 원소까지
- 문자열 정렬하기 (1)
- array
- 조건에 맞게 수열 변경하기 3
- 프로그래머스
- 프로그래머스 주사위 게임1
- 스파르타 코딩클럽 내일배움캠프
- 프로그래머스 조건에 맞게 수열 변경하기 3
- ruby설치
- 주사위 게임1
- 프로그래머스 암호 해독
- swift
- Break
- Error installing cocoapods
Archives
- Today
- Total
dev._.note
[Swift] 스레드(Thread) 본문
📌 스레드(Thead)란?
스레드(Thread)는 동시에 여러 작업을 수행하기 위해 사용되는 실행 단위로써 스레드를 사용하면 여러 작업을 병렬로 실행하여 프로그램의 성능을 향상할 수 있음.
스레드의 개념
스레드는 각각의 독립적인 실행 경로를 가지며, 동시에 여러 코드 블록을 실행할 수 있음.
각 스레드는 자신만의 스택 영역을 가지고 있으며, 프로그램의 다른 부분과 독립적으로 실행.
스레드의 동작 방식
- 메인 스레드(Main Thread) : 모든 iOS 앱은 메인 스레드에서 실행. 사용자 인터페이스(UI) 이벤트 처리, 그리기 작업 등을 메인 스레드에서 처리.
- 백그라운드 스레드(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 공식문서
'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 |