Grand Central Dispatch

Main Thread / Global Thread

Main Thread

iOS에서 메인 쓰레드는 오직 한개만 존재한다.

우리가 작성한 코드들이 바로 이 메인 쓰레드에서 동작한다.

(코드가 Cocoa에서 실행 될 때, Main Thread에서 호출하기 때문이다.)

메인 쓰레드는 인터페이스 쓰레드 라고도 불리는데,

UI와 관련된 작업은 모두 이 메인 쓰레드에서 작업되기 때문에

UI와 관련된 작업은 반드시 메인 쓰레드에서 작성해야 한다.

만약 지키지 않으면 보라색 오류가 난다.

메인 쓰레드는 메인 큐에서 실행되고, 메인 큐가 serial 큐 라서 한번에 하나의 작업만 실행 할 수 있다. 만약 메인 쓰레드에서 시간이 오래 걸리는 작업을 실행하게 되면 그동안 어플 화면이 정지된 것처럼 멈추게 된다.

따라서 UI를 실행하는 데 영향을 줄만한 코드(시간이 오래 걸리는 작업)들은 메인 쓰레드 에서 실행하면 안 되고, 글로벌 쓰레드에서 실행시켜야 한다.

Global Thread (백그라운드 쓰레드)

iOS에서 Framework들은 모두 BackGround에서 구동된다. 몸체는 백그라운드에 있지만, 가끔 필요할 때 main Thread에게 손을 뻗는 구조이다.

예를 들어, 어플에서 음악을 재생할 때, 음악 재생에 필요한 프레임 워크를 사용할 것이다. 이 때 음악 재생에 필요한 프레임 워크 작업들은 모두 백그라운드에서 실행되고, 필요에 따라 ‘음악 재생에 성공했다.’ 같은 이벤트를 알려줄 때 Delegate, Completion Handler 등을 통해 Main Thread에게 알려 통제 할 수 있다.

만약 모든 프레임워크 작업이 모두 메인 쓰레드에서 작동한다면,

앱의 화면은 모두 계속 멈춰있을 것이다.