intro) 이전 포스팅 정리

우리는 그동안 메인 쓰레드 노동자를 너무 괴롭혀왔다. 그래서 우리는 다른 쓰레드 노동자들이 동시에 일을 할 수 있도록 하기로 했다. 그 과정에서 iOS에서 제공하는 GCD를 활용할 것이고. GCD씨가 Dispatch Queue에 작업만 보내준다면, 알아서 분배를 해준다!

Untitled

1. 동기 vs 비동기

그럼 이제 작업을 하나 보낸 메인 쓰레드씨가 어떤 반응을 하고 계신지를 살펴보도록 하자 크게 두 가지의 경우가 있을 수 있다.

1-1. 메쓰씨는 어떻게 행동할까?

i) 바로 그 다음 작업을 바로 부신다.

ii) 끝날 때까지 기다린 후에 큐에 보낸 작업이 끝나면 다음 일을 진행한다.

류희재씨 같이 열정적인 사람이 메쓰라면 바로 다음 작업을 부시면서 해결할 수 있다. 하지만 요즘같이 슬럼프에 빠진 류희재씨라면 아마도.. 저거 끝나면 해야지란 생각해..!

Untitled

Untitled

1-2. 동기 vs 비동기

i) 작업을 바로 부신다 → 메인 스레드가 자기한테 쌓여있는 다음 일을 실행 ⇒ 비동기(async) ii) 끝날 때까지 기다린 후에 자기한테 쌓여있는 작업을 한다 ⇒ 동기(sync)

i) 비동기

아래의 코드에 맞게 다시 표현을 하자면

원래의 작업이 진행되고 있던 메인 스레드에서 global dispatch queue로 task를 보낸 후, 해당 작업이 끝나기를 기다리지 않고 이어서 할 일을 한다

당연히 비동기로 실행을 하게 되면 시간 절약이 되겠지?

Untitled

위에 코드를 돌리면 메인 쓰레드에서 걸리는 시간은 진짜 엄청 짧을거다(0.444초 정도). 왜냐하면

  1. 작업큐에 작업 올렸다!