우리는 그동안 메인 쓰레드 노동자를 너무 괴롭혀왔다. 그래서 우리는 다른 쓰레드 노동자들이 동시에 일을 할 수 있도록 하기로 했다. 그 과정에서 iOS에서 제공하는 GCD를 활용할 것이고. GCD씨가 Dispatch Queue에 작업만 보내준다면, 알아서 분배를 해준다!
그럼 이제 작업을 하나 보낸 메인 쓰레드씨가 어떤 반응을 하고 계신지를 살펴보도록 하자 크게 두 가지의 경우가 있을 수 있다.
i) 바로 그 다음 작업을 바로 부신다.
ii) 끝날 때까지 기다린 후에 큐에 보낸 작업이 끝나면 다음 일을 진행한다.
류희재씨 같이 열정적인 사람이 메쓰라면 바로 다음 작업을 부시면서 해결할 수 있다. 하지만 요즘같이 슬럼프에 빠진 류희재씨라면 아마도.. 저거 끝나면 해야지란 생각해..!
i) 작업을 바로 부신다 → 메인 스레드가 자기한테 쌓여있는 다음 일을 실행 ⇒ 비동기(async) ii) 끝날 때까지 기다린 후에 자기한테 쌓여있는 작업을 한다 ⇒ 동기(sync)
아래의 코드에 맞게 다시 표현을 하자면
원래의 작업이 진행되고 있던 메인 스레드에서 global dispatch queue로 task를 보낸 후, 해당 작업이 끝나기를 기다리지 않고 이어서 할 일을 한다
당연히 비동기로 실행을 하게 되면 시간 절약이 되겠지?
위에 코드를 돌리면 메인 쓰레드에서 걸리는 시간은 진짜 엄청 짧을거다(0.444초 정도). 왜냐하면