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 |
Tags
- Refactoring
- UICollectionView
- Clean Code
- MVVM
- tableView
- UITextView
- Xcode
- 애니메이션
- Human interface guide
- Observable
- 리펙토링
- HIG
- 리펙터링
- ios
- clean architecture
- 클린 코드
- rxswift
- swiftUI
- ribs
- 스위프트
- swift documentation
- uiscrollview
- RxCocoa
- combine
- 리팩토링
- Protocol
- collectionview
- uitableview
- SWIFT
- map
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] DispatchQueue.main.async와 DispatchQueue.main.sync 스레드 동작 이해하기 본문
iOS 응용 (swift)
[iOS - swift] DispatchQueue.main.async와 DispatchQueue.main.sync 스레드 동작 이해하기
jake-kim 2023. 9. 28. 01:58DispatchQueue 개념
- 대학 전공서로 대표적으로 많이 쓰는 OS 공룡책에 의하면, apple은 스레드 풀을 DispatchQueue라는 곳에서 관리하도록 하여 개발자는 스레드 관리에 많은 신경을 쓰지 않고 사용이 가능
- DispatchQueue를 사용하면 Thread Safe하게 스레드 풀을 알아서 관리
- main 관련 스레드를 관리해주는 것들은 DispatchQueue.main으로 사용
- background 관련 스레드를 관리해주는 것들은 DispatchQueue.global(), DispatchQueue()으로 사용
Async, sync 개념
- async: 앞전에 있던 task들이 끝나는 것을 기다리지 않고 새로운 task를 처리
- sync: 앞전에 있던 task들이 끝난 후에 새로운 task 처리
ex) A -> B -> C -> D 순서대로 작업 Queue에 넣고 일을 수행
- async: 일 완료 순서가 매번 다름
- sync: 일 완료 순서가 항상 같음 A -> B -> C -> D
DispatchQueue.main.async와 DispatchQueue.main.sync 개념
- async는 main 내부에서의 일들을 의하는게 아니고, 현재 스레드를 async로 처리한다는 의미이기 때문에 현재 스레드의 특정 작업이 끝나는 것을 기다리지 않고 async로 들어오는 {} 부분을 수행한다는 의미
- sync는 현재 스레드를 sync로 처리한다는 의미이며, 현재 스레드를 잠시 block하고 {}로 들어온 일을 수행한다는 의미
ex) 이미 main thread인 상황에서 DispatchQueue.main.sync를 사용하면 deadlock이 걸리는 현상
- sync로 동작하면, 현재 스레드 (main thread)를 차단하고, 새로운 task를 수행하려고 하는데 이것도 main thread라서 수행하지 못하는 상황이 발생
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments