교착상태(DeadLock)
DispatchQueue-serial, concurrent, main / async, sync 각각 일련의 테스크를 실행하여 성능을 측정하던 도중 DispatchQueue.main.sync
를 호출하면 앱이 죽는 상황이 발생했습니다. 그래서 구글신께 여쭈어 보다 보니 아래의 이미지내용 힌트를 얻었습니다. 그래서 DeadLock….
앱의 모든 UI 작업이 Main queue
에서 수행하기 때문에 동기적으로 main 큐에 접근하여 작업을 실행하려고 하면 교착상태(dead-lock)
가 발생합니다.
개인 Note: 아마 main queue에 작업이 남아 있을때 어떤 작업을 동기적으로 추가하려고 했을때 시스템/애플리케이션 이 메인스레드가 교착상태에 빠질수 있는 상태를 막기위함인것 같습니다.
정확한 내용은 아니고 개인적인 추측입니다. 추후 다시 수정하겠습니다.
참조 링크
여담
틀린 부분이나 잘못된 부분을 댓글로 알려주면 정말 큰 도움이 됩니다!
Reference
webie’s blog
Dispatch
GCD Main Thread Crash Issue (Explanation Needed)?
main.async vs main.sync() vs global().async in Swift3 GCD
iOS. 왜 main.sync를 하면 안될까