동기 (Sync)
✏️ 동기(Synchronous) : 동시에 발생[존재]하는
✅ '요청'과 '응답'이 동시에 발생한다. ➡️ 요청에 대한 응답이 동시에 발생해야한다. 즉, 내 Task가 완료되기 전까지는 다른 Task를 수행하지 못한다.
ex) 식당에서 음식을 주문하려고 한다. 닭발, 계란찜, 옛날 통닭을 Sync(동기)로 주문하면(?) 닭발이 나올 때까지(응답) 계란찜과 옛날 통닭은 주문할 수 없다. Why? Sync는 '요청(주문)'과 '응답(음식 서빙)'이 동시에 발생해야하기 때문이다. 즉, 내 Task가 완료되기 전까지는 다른 Task를 수행할 수 없다는 말이 이 뜻이다.
위의 그림에서 Task1의 작업이 완료 되어야만 다음 작업이 실행되기 때문에 전체 실행 시간은 28sec(10 + 7 + 5 + 6)이다.
동기적으로 처리하면 sleep(2) 수행 후 print가 수행되어 2초 후에 Print가 Log에 출력 된다.
비동기 (Asynchronous)
✏️ 비동기(Asynchronous) : 동시에 발생[존재]하지 않는
✅ '요청'과 '응답'이 동시에 발생하지 않는다. ➡️ 요청에 대한 응답이 동시에 발생하지 않는다. 즉, 내 Task가 완료되기 전에 다음 Task를 수행한다.
✅ 비동기에서는 요청에 대한 응답이 나중에 오기 때문에 Callback 함수로 들어온다. (응답을 받기 전에 다른 작업들을 계속 하기 때문)
ex) 식당에서 음식을 주문하려고 한다. 닭발, 계란찜, 옛날 통닭을 Async(비동기)로 주문하면(?) 닭발을 주문(요청)하고 닭발이 나올 때까지(응답) 기다리지 않고 계란찜과 옛날 통닭을 주문(요청)할 수 있다. Why? Async는 '요청(주문)'과 '응답(음식 서빙)'이 동시에 발생하지 않기 때문이다. 즉, 내 Task가 완료되기 전까지는 다음 Task를 수행한다는 말이 이 뜻이다.
위의 그림에서 Task1이 완료되지 않아도 다음 Task를 수행하기 때문에 Task2~4도 동시에 수행한다. 전체 실행 시간은 작업 시간이 가장 긴 Task1의 작업이 끝나는 시간인 10sec이다.
비동기적으로 처리하면 sleep(10)과 동시에 수행되어 10초 뒤가 아니라 바로 Print가 Log에 출력 된다.
'iOS > iOS' 카테고리의 다른 글
[iOS] 라우터 패턴과 Alamofire를 이용해서 API 통신을 해보자. (0) | 2024.06.26 |
---|---|
[iOS] Xcode에서 앱 이름 변경하기 (0) | 2024.01.27 |
[iOS] 프로세스(Process), 쓰레드(Thread) (0) | 2024.01.26 |
[iOS] 생명주기 - ViewController LifeCycle 2 (1) | 2023.08.20 |
[iOS] 생명주기 - ViewController LifeCycle 1 (0) | 2023.08.17 |