- 응답이 완료될 때까지, 다음 동작을 수행할 수 없음
- 기본적으로 프로그래밍은 동기로 이루어 짐
- 요청과 결과가 한 자리에서 동시에 일어남
- 노드 사이의 작업 처리 단위를 동시에 맞춤
- 요청을 하면, 시간과 상관 없이 그 자리에서 결과가 주어져야 함
- A 작업이 완료될 때까지, B 작업 수행 불가
func distance(p1 : Int, p2 : Int) -> Int {
return abs(p2 - p2)
}
func area(x1 : Int, y1 : Int, x2 : Int, y2 : Int) -> Int {
let dX = distance(x1, x2) // 이 줄에서 실행하고, distance 를 돌아 오는동안 area은 멈춰있는다.
let dY = distance(y1, y2)
return dX * dY
}
- 응답 상태와 상관 없이, 다음 동작 수행 가능
- 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 됨
- 요청을 하면, 그 자리에서 결과가 주어지지 않음
- 작업 결과 순서가 보장되지 않음
- A 작업과 함께 B작업 수행 가능 ( A 작업은 결과 값이 나오는대로 출력 )
동기와 비동기를 쉽게말해,
카페에서 음료를 주문한다고 해보자.
앞사람이 주문을 하고, 음료를 받을 때 까지 내가 주문을 못하는 게 동기
한 직원이 주문을 받고 손님들에게 진동벨을 나눠주고, 다른 직원은 계속 음료를 만들어 제공하는 게 비동기
Concurrent Queues
와 Serial Queues
가 존재한다.DispatchQueue.global().async {
// 구현부
}
DispatchQueue.main.async {
// 구현부
}
GCD | Operation Queue |
---|---|
간단한 작업 | 복잡한 작업 |
메서드 위주의 작업 | 데이터와 기능을 캡슐화 |
상태를 알 수 없음 | 취소/순서지정/일시중지 등 상태 추적이 쉬움 |
FIFO | 다른 요인들을 고려해 순서를 지정 |