일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Swift
- Hello
- 네이버 부캠
- OS
- WWDC
- 후기
- SwiftUI
- notion
- Cocoa Internals
- 단위 테스트
- 커스텀 뷰
- 코코아 인터널스
- 부스트캠프
- development
- 개발
- 부트캠프
- Opensource
- rxswift
- 알고리즘
- Algorithm
- Design Pattern
- IOS
- 디자인패턴
- boostcamp
- Tistory
- ios #swift #uialertcontroller #메서드 스위즐링
- World
Archives
- Today
- Total
꿈돌이랜드
Swift Concurrency의 함정사항 정리 본문
반응형
참고한 글!
Core 수만큼 정확하게 스레드를 생성하는가?
- 코어 수 만큼 아주 정확하게 스레드를 생성하지는 않음.
- 필요에 따라 더 스레드를 만들어서 Priority가 High인 작업들 속에서 상대적으로 낮은 작업의 실행이 영원히 기다리지 않도록 방지한다.
- 그 반대의 경우도 마찬가지 (먼저 실행중인 task가 low이고 오래동안 점유 중 일때, high인 task가 들어올 경우)
- 우선순위가 다른 여러 작업이 있을 때 Suspension points에서 높은 확률로 우선순위가 높은 작업이 스레드를 할당받는다.
- 현재 실행해야 하는 작업 중 우선순위가 가장 높은 작업이 스레드를 코어 수만큼 차지하고 있다면, 우선순위가 그보다 낮은 작업을 위해 별도 스레드가 추가된다. 따라서 스레드는 코어 수로 고정되는 것이 아니라 상황에 따라 그보다 많을 수 있으며, 이렇게 추가된 스레드는 우선순위가 낮은 작업만을 실행해서 우선순위가 높은 작업이 종료되기를 무한정 기다리는 것을 방지한다.
await 키워드를 만나기만 하면 해당 지점은 suspension point로 작동하는가?
- Suspension points가 없는 함수에서 특정 조건을 만족할 때
await
키워드와 함께async
함수를 호출하는 테스트를 진행했고, 결과는 Suspension points가 될 수 없다고 나왔다.async
함수를 내부에서await
키워드와 함께 실행했지만 스레드 점유권을 양도하거나 양도받는 상황은 나타나지 않음! - 따라서 명확하게 suspension point로 작동하려면
- Task.yield()를 호출하거나
- 자식 작업을 생성한다.
- async let binding이나
- withTaskGroup, withThrowingTaskGroup 등
- Task.sleep도...
반응형
'Programming > iOS' 카테고리의 다른 글
TCA 아키텍처에서 IdentifiedArray를 사용해야 하는 이유 (0) | 2025.03.21 |
---|---|
메서드 스위즐링을 적용하여 실수로부터 벗어나기 (0) | 2025.03.17 |
[번역] SwiftNIO Readme Conceptual Overview (0) | 2024.01.16 |
[iOS] Core Animation Basic (0) | 2023.09.30 |
[iOS] 객체 아카이빙과 iOS 12.0 이후의 변화 (0) | 2023.09.26 |