Actor에서 Class + OSAllocatedUnfairLock
상태 보호를 위해서 actor로 작성된 객체를 class + OSAllocatedUnfairLock으로 변경
프로파일링 과정에서 특정 메서드의 호출 빈도가 높아지는 경우 지속적으로 CPU Usage가 높게 잡히는 부분이 있어서 확인
Actor 기반으로 작성한 메서드를 실행했을 때
completeTaskClousre로 나타나는 영역에서 Weight를 많이 차지함.

해당 메서드의 구현부는 swiftlang / swift에 존재.
https://github.com/swiftlang/swift/blob/main/stdlib/public/Concurrency/Task.cpp

간단한 Task를 컨텍스트에 넣어서 클로저로부터 최종 반환을 처리하는 함수
/// The function that we put in the context of a simple task
/// to handle the final return from a closure.
SWIFT_CC(swiftasync)
static void completeTaskWithClosure(SWIFT_ASYNC_CONTEXT AsyncContext *context,
SWIFT_CONTEXT SwiftError *error) {
// 클로저 컨텍스트를 해제하기 위해, AsyncContext의 앞에 붙어 있는 AsyncContextPrefix로 이동
// 힙이라서 포인트를 앞쪽 메모리 영역으로 이동시킴 (낮은 주소 -> 높은 주소로 메모리 할당)
auto asyncContextPrefix = reinterpret_cast<AsyncContextPrefix *>(
reinterpret_cast<char *>(context) - sizeof(AsyncContextPrefix));
// 클로저 컨텍스트를 메모리 해제
swift_release((HeapObject *)asyncContextPrefix->closureContext);
// Task의 정리 작업 후 Task 객체를 해제
return completeTaskAndRelease(context, error);
}
Class + OSAllocatedUnfairLock으로 작성한 메서드를 실행했을 때
completeTaskClousre 영역이 사라져서 CPU Usage 감소

(참고)
https://github.com/swiftlang/swift/blob/main/stdlib/public/Concurrency/Task.cpp
swift/stdlib/public/Concurrency/Task.cpp at main · swiftlang/swift
The Swift Programming Language. Contribute to swiftlang/swift development by creating an account on GitHub.
github.com
'project > 개발 업무' 카테고리의 다른 글
| UNUserNotificationCenter `requestAuthorization`에서 발생하는 희귀한 버그 현상 분석 (0) | 2025.10.27 |
|---|---|
| l-value, r-value (0) | 2025.10.23 |
| Swift Concurrency Task weak self 실험 정리 (0) | 2025.07.29 |
| Tuist CocoaPod 연동 (0) | 2025.07.05 |
| (Concurrency, Combine) 전역 이벤트 관리 (1) | 2025.05.31 |