인프런 커뮤니티 질문&답변

창혁 강님의 프로필 이미지
창혁 강

작성한 질문수

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

Main.async 질문

작성

·

204

1

안녕하세요 앨런! 강의를 듣던중 main.async에 대해 이해가 잘 가지 않아 질문드립니다.

Dispathqueue.main.async는 task를 main 큐(main쓰레드)에 보내서 비동기적으로 처리하겠다는 말인데, 아시다시피 main 큐는 직렬 큐이기 때문에 비동기적으로 처리하려고해도 물리적으로 1개의 쓰레드밖에 없기 때문에 순서대로 task를 처리하게 됩니다. 결국엔 동기적으로 처리하게 되는거나 마찬가지인데, 왜 굳이 메인쓰레드를 비동기적으로 처리하는지 궁금합니다.

답변 1

1

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네네 창혁 님!


일반적으로 main.async를 사용하는 상황이 어떤 상황이냐면... 2번쓰레드에서 이미지 같은 것을 받아와서 (이미지 표시는 다시 1번쓰레드/메인쓰레드에서만 해야하니까) 작업을 다시 보내주는 거예요.

그런데, 그러면 왜 굳이 async(비동기)이냐? 라고 생각해보시면.. 반대로 sync(동기)로 보내면.. (동기는 보낸작업이 끝날때까지 기다린다고 말씀드렸고) 이런 경우.. 2번쓰레드가 기다리게 됩니다..

이미지를 다 받아와서 이제 화면에 표시하라고 1번 쓰레드에 다시 보낸 것인데, 2번 쓰레드는 굳이 그 이미지 표시하는 작업을 기다릴 필요가 없죠. (왜냐면 2번 쓰레드 입장에서는 할일 다 하고 1번 쓰레드로 보낸 것이니까..)

이런 의미로 main.async로 사용하는 거예요 :)
(2번쓰레드에서 1번쓰레드로 보낸 일을, 2번쓰레드 입장에서 기다리지 않겠다.)


(물론 main쓰레드 자체는 직렬큐 이기 때문에 1개이고.. 순서적으로 동작하지만, 2번 쓰레드에서 이미지 받아온 일을 어느 순간에는 작업으로 할당받아서 표시하게 되는것은 맞고요.)


열공하시고요!!
화이팅 :)

창혁 강님의 프로필 이미지
창혁 강

작성한 질문수

질문하기