작성
·
389
답변 2
1
답변 감사합니다!
강의를 복기해보는 과정에서
메인 -> 메인으로 sync task를 보내는 데드락 상황과
메인 -> 글로벌로 sync task를 보내는 게 헷갈렸던 것 같아요 🥲
이해했습니다! 감사합니다
1
네 안녕하세요! w0308h 님.
왜 클로저 안의 작업을 다른 쓰레드로 동기로 보내면 한없이 기다리게 된다고 생각하셨을까요?
작업을 다른 쓰레드로 보내도 한없이 기다리지 않습니다. 예를 들어서, 3초가 걸리는 작업을 다른 쓰레드로 동기(sync)로 보냈으면, 그 작업이 종료 될때까지 "3초간만" 기다리기 때문에 크래시가 발생하지 않습니다.
네 그리고 말씀하신 대로 sync로 일을 보내면 (실제로도 다른 쓰레드에 일을 보낼 필요가 없고 메인쓰레드에서 작업 하기 때문에) 메인쓰레드에서 3초간의 오래걸리는 일을 할뿐. 즉, 그래서 화면이 버벅이게 될 뿐 크래시가 발생하지 않습니다.
예를 들어 내부가 비동기로 구현되지 않은 아래 와 같은 작업을 DispatchQueue.global().sync 로 보내시면 메인쓰레드에서 직접 일을 하고, 오래 동안 걸리기 때문에.. 어떤 화면 애니메이션이라던지 / 스크롤이라던지가 버벅일 뿐 크래시가 나는 것은 아닙니다.
let data = try? Data(contentsOf: url)
물론, 아직 강의 뒤쪽을 안보신 것 같은데, 실제 크래시가 나는 DeadLock 같은 상황들은 따로 있습니다.
일단 말씀주신 질문 내용은 답변을 드린 것 같고, 연관해서 크래시가 나는 실제 상황들은 강의 뒤쪽에서 또 말씀드리니.. 그 부분들을 보신 후에 추가적으로 궁금하신 내용들이 생기시면 질문주세요!
감사합니다. :)
아 네네 이해되셨다니 다행이네요! 좋은 하루 되세요 :)