iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해를 보고 정리한 글입니다.
var a = 1
DispathQueue.global().async{
sleep(1)
a += 1
}
DispathQueue.global().async{
sleep(1)
a += 1
}
print(a) // 1이 출력 왜냐하면 디스패치 큐가 비동기로 실행되어서 먼저 실행되어서 그렇다.
동기 작업이 현재의 쓰레드가 필요한 경우
앞선 작업이 현재의 쓰레드가 필요한 경우
여러개의 세마포어가 존재할때, 순서 잘못 설계 등
Serial 큐로 해결 가능 (세마포어나 제한된 리소스 순서 같은 것 조심히 사용해야 하고, 객체 등 설계 시에 각별히 주의)
1차적으로 GCD가 우선순위를 조정해서 알아서 해결 ( 낮은 우선순위 작업의 우선순위를 높여서 우선 처리)
안전하게 공유된 자원 접근시 - 동일한 Qos 사용