global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.
501
投稿した質問数 1
안녕하세요.
강의 잘 듣고 있습니다!
sync를 공부하다가 의문이 생겨서 질문 남깁니다.
메인스레드에서 메인큐로 sync로 작업을 보내면
ui를 보여줘야할 메인에서 작업을 한없이 기다리게 되니 크래시가 난다고 알고 있습니다.
강의에서, 메인에서 글로벌큐로 sync로 작업을 보내더라도 실질적으로는 메인에서 작업을 한다고 하셨는데요.
그렇다면 실질적으로는 메인에서 sync로 작업을 하는 것과 다를 바가 없는데, 그런 경우에는 왜 크래시가 발생하지 않는 건가요?
回答 2
1
답변 감사합니다!
강의를 복기해보는 과정에서
메인 -> 메인으로 sync task를 보내는 데드락 상황과
메인 -> 글로벌로 sync task를 보내는 게 헷갈렸던 것 같아요 🥲
이해했습니다! 감사합니다
1
네 안녕하세요! w0308h 님.
왜 클로저 안의 작업을 다른 쓰레드로 동기로 보내면 한없이 기다리게 된다고 생각하셨을까요?
작업을 다른 쓰레드로 보내도 한없이 기다리지 않습니다. 예를 들어서, 3초가 걸리는 작업을 다른 쓰레드로 동기(sync)로 보냈으면, 그 작업이 종료 될때까지 "3초간만" 기다리기 때문에 크래시가 발생하지 않습니다.
네 그리고 말씀하신 대로 sync로 일을 보내면 (실제로도 다른 쓰레드에 일을 보낼 필요가 없고 메인쓰레드에서 작업 하기 때문에) 메인쓰레드에서 3초간의 오래걸리는 일을 할뿐. 즉, 그래서 화면이 버벅이게 될 뿐 크래시가 발생하지 않습니다.
예를 들어 내부가 비동기로 구현되지 않은 아래 와 같은 작업을 DispatchQueue.global().sync 로 보내시면 메인쓰레드에서 직접 일을 하고, 오래 동안 걸리기 때문에.. 어떤 화면 애니메이션이라던지 / 스크롤이라던지가 버벅일 뿐 크래시가 나는 것은 아닙니다.
let data = try? Data(contentsOf: url)
물론, 아직 강의 뒤쪽을 안보신 것 같은데, 실제 크래시가 나는 DeadLock 같은 상황들은 따로 있습니다.
일단 말씀주신 질문 내용은 답변을 드린 것 같고, 연관해서 크래시가 나는 실제 상황들은 강의 뒤쪽에서 또 말씀드리니.. 그 부분들을 보신 후에 추가적으로 궁금하신 내용들이 생기시면 질문주세요!
감사합니다. :)
오퍼레이션 큐 질문
0
128
2
2) 오퍼레이션큐(OperationQueue) 강의 질문입니다
0
145
2
warning 뜸
0
151
1
수업자료 markup 에 대해 궁금합니다!
0
273
1
예제 프로젝트 빌드 실패
0
331
2
serial 큐 질문드립니다.
0
251
1
[7-3.DispatchBarrier] 예제 코드 질문
0
325
1
안녕하세요, GCD 관련 질문드립니다..
0
284
1
main.async 작동 질문(+ vs global(),async)
0
432
1
dismiss 되었을 때 종료질문
0
303
1
'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.
0
491
2
Dependency Protocol 관련
1
364
1
시리얼 큐와 sync 관련
0
464
2
sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미
0
645
1
lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?
0
385
1
비동기 개념에서 무엇을 return하는 거죠??
0
391
1
안녕하세욤
1
339
1
Barrier 작업 관련 질문입니다.
1
340
1
디스패치 그룹
1
381
1
global async안에 global async를 만들게되면 어떻게 되나요??
2
379
2
동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다
1
285
2
비동기오퍼레이션 관련 질문
1
369
1
강의자료는 어디에 있나요?
1
321
1
AsyncOperation을 async await Task로 대체 가능한 지에 대한 질문
1
410
1

