멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명

멀티 쓰레딩을 사용하는 이유

Pros

시간이 오래걸리는 작업을 진행 시 어플리케이션의 실행을 방해하면 안되기에

멀티 코어에서 큰 작업을 여러개로 분할하여 진행해야 하기에

메모리 공간과 시스템 자원 절약을 위해

프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 간단하다.

별도의 자원을 이용하지 않고 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용하여 데이터를 주고 받는다.

Cons

동일한 자원에 동시에 접근했을 경우? race Condition

병목현상이 발생하여 성능이 저하될 수 있다.


고려해야 할 점은 어떤 작업을 global 큐에 넣어야 할지 정확히 알아야 하고

global 큐에 작업을 배치할 때, 작업에 따라 QoS를 적절하게 사용해야 한다.

또한 동기, 비동기로 할지를 명확하게 정의하고 상황에 따라 작업 간의 인과관계를 설정하거나. 특정 시간 이후에 처리하도록 설정해야 한다.

직접적으로 스레드를 관리하지 않고 Queue를 활용하여 작업을 분산 처리하고 GCD, Operation을 이용하여 iOS에서 알아서 스레드 숫자를 관리한다. 그리고 다른 스레드에서 작업들이 비동기적으로 동작하도록 만든다.


가장 기본적으로 UI Update에 관한 작업들은 메인 스레드에서 구현되어야 한다. 그리고 가장 신경써야할 작업은 스레드에 안전하지 않은 변수는 서로 다른 스레드에서 동시에 접근하면 위험하기 때문에 해당 작업에 신경을 많이 써야 한다.

QoS