꿈돌이랜드

Swift Concurrency의 함정사항 정리 본문

Programming/iOS

Swift Concurrency의 함정사항 정리

loinsir 2025. 4. 2. 23:52
반응형

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도...
반응형