이를 피하려면
싱글코어에서 이런식으로 투 쓰레드 돌리려면 어떻게 할래? -> QOS
에너지를 지키기 위해서 저지른 일
QoS별로 다르게 돌림
아이패드처럼 앱 2개이상 돌리는 건 메인쓰레드가 2개 이상인데 어떡함? -> QoS별로 결정
스크롤이 드르륵 거리는 걸 원치 않을 때(ui는 어떻게든 컨트롤 하는 중)
원하는 정보가 오지 않지만 UI는 움직일 수 있음(그러니까 빨리 가져와야 함)
automatic propagation이라는 걸 하는데 그거 UI를 IN으로 바꿔서 적절히 실행될 수 있게끔 QoS를 바꿔주는 것
상위 QoS는 무시된다(이해 안됨)
규칙은 이러하다
계산같이 긴 작업을 할 떄
클린업같이 안 보여도 되는 작업을 할 때
상식적으로는 시리얼 큐에서 QoS가 높더라도 앞에 태스크가 차있으면 먼저 실행될 리가 없다. 근데 큐 한바퀴 돌면서 우선순위 높은 거 찾아준다.
쓰레드가 i/o를 기다린다. 그러면 다음 블록이 쓰레드를 새로 받는데 그러다보면 쓰레드가 너무 많아짐. 그러다 개수 리밋을 쳐버리면 데드락이 발생함.
싱크 쳤는데 남은 쓰레드가 없으면 데드락(쓰레드 줄 떄까지 계속 기다리고 쓰레드에서 작업을 돌려야 리턴을 할 건데 그러질 못하니까 데드락이 생겨버림)
웬만하면 시리얼 큐 쓰세요.