CS/동시성
2. 동기(Synchronous) VS Asynchronous(비동기)
Damagucci-juice
2022. 8. 31. 17:22
비동기
- 작업을 다른 스레드로 보내서 처리를 하는데, 보내는 즉시 원래 스레드로 리턴한다.
- 1번 작업이 오래걸리더라도, 그 일이 끝나던지 말던지 2번 작업으로 갈 수 있다.
DispatchQueue.global().async {
}
- 원래 작업이 진행되고 있던 곳(메인스레드)에서
- 디스패치 글로벌 큐로 보낸 작업을
- 안기다린다.
동기
- 1번 작업이 끝날 때까지 메인 스레드를 막고 기다린다.
- 다른 큐에 보내는 것 같지만 실질적으로 처리는 메인 스레드에서 진행한다.
DispatchQueue.global().sync {
}
- 원래 작업이 진행되고 있던 곳(메인스레드)에서
- 디스패치 글로벌 큐로 보낸 작업을
- 동기적으로 기다린다.
위에 task1,2,3() 메서드들은 시작 - 완료 사이에 `sleep(1,2,3)` 이 있는데,
동기 작업이라면 그 시간을 기다렸을 텐데, 비동기 작업이여서
오른쪽 위에 0.0002 초만에 작업이 끝난 모습이다.
(물론 완료 프린트 문은 수 초가 지난 다음에 찍힌다.)
동기적으로 처리한 경우엔, 8.002초가 걸린다.
결론
- 비동기는 작업을 다른 스레드로 보내고 즉시 리턴
- 동기는 작업을 다른 스레드로 보내고 완료될 때 까지 기다린다.
- 비동기는 서버와의 통신(네트워크 작업) 때문에 필요하다.
- 예) URLSession
- 일을 시키고 끝날 때까지 기다리느냐 안 기다리느냐가 포인트