7장: 스레드 호핑(Context Switching) 오버헤드 측정기

백그라운드로 작업을 이탈시킨 후 다시 메인 액터로 복귀하는 연산이 유발하는 실제 성능 지표 대조
A플랜 (무분별한 비동기 분리)

무지성 백그라운드 스케줄링

가벼운 문자열 포맷 연산 1,000번을 매번 독립된 백그라운드 태스크로 이탈 및 복귀시킨다.

for _ in 1...1000 { Task.detached { let res = self.formatString() await MainActor.run { self.uiArray.append(res) } } }
Main 스레드 권역
스레드 경계선
📦 Data
Background 권역
📱 갤러리 로드 (A플랜 · 순서 무효)
진행률: 0 / 1,000
물리 스레드 스위칭 횟수: 0회
총 실행 소요 시간: -
💥 호핑 오버헤드 오염 확정:
단순 연산을 백그라운드로 밀어냈지만 스레드 경계를 왕복하는 컨텍스트 스위칭이 총 2,000회 누적되면서, 시스템 통행료(오버헤드)가 본체 연산 비용을 압도해 연산 속도가 수백 배 저하되었습니다.
B플랜 (동기 직행 처리)

정적 격리 내부 다이렉트 연산

메인 액터 컨텍스트에 락(Lock)이 없는 것을 확인하고, 불필요한 이탈 없이 그 자리에서 1,000번 동기 실행한다.

for _ in 1...1000 { let res = self.formatString() self.uiArray.append(res) }
Main Thread 권역 (제자리 연산)
스레드 경계선
⚡ Direct
Background (경로 차단)
📱 갤러리 로드 (B플랜 · 동기 정렬)
진행률: 0 / 1,000
물리 스레드 스위칭 횟수: 0회
총 실행 소요 시간: -
🛡️ 정적 격리 직행 성공:
불필요한 스레드 스위칭을 단 1회도 유발하지 않고 메인 액터 내부에서 일괄 동기 처리하여 연산을 단 수 밀리초(ms) 만에 완수했습니다. 데이터 레이스 안전성과 성능을 동시에 잡았습니다.