1. 동기 vs 비동기
안녕하세요◠‿◠ 고고입니다.
카페를 예로 들자면
동기 - 앞의 사람이 주문을 해서 음료(결과)를 받을 때까지 뒤의 사람들은 모두 다 대기합니다.
비동기 - 앞의 사람이 주문을 하고 진동벨을 받아가고, 뒤의 사람은 주문을 한다. 진동벨이 울리면 음료를 받아가면 됩니다.
요약하면
동기 - 요청을 보낸 후 응답(=결과)를 받아야지만 다음 동작이 이루어지는 방식
비동기 - 요청을 보낸 후 응답(=결과)와는 상관없이 다음 동작이 이루어지는 방식
동기(sync)
장점 - 설계가 간단하고 직관적
단점 - 결과가 주어질 때까지 아무것도 하지 못하고 대기해야 함
비동기(Async)
장점 - 아래 예제처럼 서버로부터 데이터를 가져오는 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있음
단점 - 동기보다는 복잡
그림 출처 : https://webclub.tistory.com/605
2. 직렬 vs 동시
직렬(Serial) 큐 - 분산처리 시킨 작업을 다른 한 개의 스레드에서 처리하는 큐
동시(Concurrent) 큐 - 분산처리 시킨 작업을 다른 여러 개의 스레드에서 처리하는 큐
Serial 큐 - 순서가 중요한 작업들. task의 시작과 종료에 대한 순서를 예측할 수 있다.
Concurrent 큐 - 각자 독립적이지만 중요도나 작업의 성격이 유사한 여러 개의 작업들. 끝나는 순서를 예측할 수 없다.
그림 출처 : https://www.raywenderlich.com/5370-grand-central-dispatch-tutorial-for-swift-4-part-1-2
+) Async vs Concurrent ?
동기/비동기 - 작업을 보내는 시점에서 기다릴지 말지에 대해 다루는 것
직렬/동시 - Queue(대기열)로 보내진 작업들을 여러 개의 스레드로 보낼 것인지 한 개의 스레드로 보낼 것인지에 대해 다루는 것
+) iOS에서 Serial 큐는 하나의 스레드 객체에서만 처리할까?
실험
let queue = DispatchQueue(label: "test.serial")
queue.async {
print("hi \(Thread.current)")
}
queue.async {
print("hi \(Thread.current)")
}
queue.async {
print("hi \(Thread.current)")
}
queue.async {
print("hi \(Thread.current)")
}
queue.async {
print("hi \(Thread.current)")
}
결과: 두 개의 스레드 객체를 사용.
hi <NSThread: 0x7fc26a467b90>{number = 2, name = (null)}
hi <NSThread: 0x7fc26a467b90>{number = 2, name = (null)}
hi <NSThread: 0x7fc26a467b90>{number = 2, name = (null)}
hi <NSThread: 0x7fc26a467b90>{number = 2, name = (null)}
hi <NSThread: 0x7fc26b1003e0>{number = 3, name = (null)}
요약 : 하나의 스레드는 항상 같은 스레드 객체를 의미하지 않습니다.
Dispatch Serial Queue는 한 번에 하나의 스레드만 Queue에서 Task을 실행하도록 보장합니다.
어떤 특정 스레드가 해당 Task를 수행할지 보장하지 않습니다.
Dispatch는 worker 스레드 풀을 유지 관리하고 task를 실행할 수 있게 되면 해당 task를 실행하기 위해 해당 풀에서 하나의 스레드를 자동으로 할당합니다.
+) 근데 제가 위에 걸 실험해보니까 다 같은 스레드 객체만 나오더라구요... 희귀한 케이스 아닌가 싶습니다.
'ios' 카테고리의 다른 글
GCD에서 의도치 않은 교착상태를 피하는 법 (0) | 2021.12.22 |
---|---|
DispatchQueue 교착상태 (0) | 2021.12.22 |
DispatchQueue 종류 세 가지 (0) | 2021.12.21 |
Error: realm accessed from incorrect thread (0) | 2021.11.19 |
[iOS] Carthage 전환 후기 (0) | 2021.11.18 |
댓글