Threading

At a glance

Texture 의 철학은 빠른 프레임 속도의 사용자 경험을 제공하기 위한 효율적인 자원활용에 대한 것이다.

다시 말해, 사용자의 입력 이벤트를 허용하고, Main Dispatch Queue 에 스케줄링된 작업을 소비하게 하는 기본 런루프를 유지하는 것이 스레드 간 작업을 분배하는 체계적 접근이다.

이는 몇가지 규칙이 있다.

  1. UIKit API의 호출은 DispatchQueue.main 또는 ASPerformBlockOnMainThread() 를 통해 메인 스레드에서 실행되어야 한다.

  2. 다른 모든 것은 일반적으로 priority 를 가진 백그라운드 스레드 에서 발생해야 한다.

Run Loop, Threads, and Queues

스레드는 코드를 실행하기 위해 커널에 의해 관리된다. DispatchQueue 는 실행될 블록의 순서 리스트를 위해 컨텍스트를 설명한다. Queue 는 GCD 와 커널에 의해 결정된 실행을 위해 특정 스레드를 사용할 수 있다.

필요에 따라 스레드 하나당 런루프 하나가 생성된다. Selector 와 Timer 는 런루프에 붙일 수 있다. 메인 스레드의 런루프는 자동으로 반복되며, 백그라운드 스레드의 런루프는 명시적으로 돌려줘야 하며, 사전 접근 없이 반드시 존재할 필요는 없다. 스레드는 오직 하나의 런루프를 가진다.

백그라운드 큐에 async 를 사용할 때 GCD 는 커널에 스레드를 요청하고, 여기서 커널이 스레드를 생성하거나 일이 없는 스레드를 생성하거나 스레드가 일이 없어질 때까지 기다린다. 이 스레드들은 한 번 만들어지면, 스레드 풀에 살아있다. 스레드는 GCD에 의해 추상화되어 직접 호출할 수 없다.

Dispatch Queue Playgrounds

작업중 ...

Last updated