목록async (3)
슈프림 블로그
DispatchQueue(GCD)의 종류 1. main queue : Serial 2. global queue : Concurrent / QoS 설정 3. private queue : 디폴트 Serial (Concurrent로 변경 가능) / QoS 추론 Main Queue DispatchQueue.main - 한개만 존재 => Main Thread에서 동작 - Serial (직렬) - UI 처리를 담당 * 쓰레드 없이 날것의 코드를 실행하는 것은 Main Queue에서 sync로 실행하겠다는 것과 같은 의미이다. * 하지만 DispatchQueue.main.sync는 코드로 사용할 수 없다. (에러) 실행방법 DispatchQueue.main.sync { ... } // 사용 불가! --ERROR-- ..
동기(Sync) vs 비동기(Async) 대기열을 어떤 방식으로 처리할지 정하는 것이다. 비동기 메인스레드에서 다른 스레드에게 작업을 시작 시키고 작업이 끝날때까지 기다리지 않는다. 메인스레드가 바로 다른 작업을 시작할 수 있게 된다. DispatchQueue.global().async {...} 동기 메인스레드에서 다른 스레드에게 작업을 시키고, 끝날때까지 기다린다. 해당 작업이 끝날 때 까지 메인 스레드는 다른 작업 하지 않고 Block상태를 유지한다. 영상 싱크가 맞는다?? 영상 로딩이 될 때 까지 음성도 기다렸다가 시점이 맞아야 비로소 재생됨을 떠올리면 좋을 것이다. DispatchQueue.global().sync {...} + 다른 스레드로 작업을 보내는 개념이긴 하지만, 작업 끝날 때 까지 ..
쓰레드 Thread 동시성 프로그래밍에 대해 공부하기 전에 쓰레드(Thread)에 대해 먼저 알아야 한다. 쓰레드는 간단하게 말하면 "프로그램이 처리해야 할 작업을 하는 녀석"들을 말한다. 쓰레드가 여러개가 있으면 여러 작업을 동시에 처리할 수 있게 된다. 따라서 시간이 오래 걸리는 작업이 여러개 있을 때, 쓰레드 하나에 모든 일을 맡기는 것 보다는 여러개의 쓰레드에 분산 처리를 시키는 것이 효율적이다. 그렇다면 작업을 어떻게 다른 쓰레드로 분산시켜 동시에 실행되도록 할까? 이것이 동시성 프로그래밍의 목적이다. iOS의 동시성 프로그래밍 iOS의 경우, 프로그래머가 직접 스레드를 관리하지 않는다. 작업을 "대기행렬"에 넣어주기만 하면, 적절한 스레드로 분산을 시키는 것은 OS가 알아서 처리해준다! 이렇게..