기어가더라도 제대로

2. 동기(Synchronous) VS Asynchronous(비동기) 본문

CS/동시성

2. 동기(Synchronous) VS Asynchronous(비동기)

Damagucci-juice 2022. 8. 31. 17:22

비동기

동기(Synchronous) VS Asynchronous(비동기) image

  • 작업을 다른 스레드로 보내서 처리를 하는데, 보내는 즉시 원래 스레드로 리턴한다.
  • 1번 작업이 오래걸리더라도, 그 일이 끝나던지 말던지 2번 작업으로 갈 수 있다.

‏‏‎ ‎

DispatchQueue.global().async {

}
  • 원래 작업이 진행되고 있던 곳(메인스레드)에서
  • 디스패치 글로벌 큐로 보낸 작업을
  • 안기다린다.

동기

동기(Synchronous) VS Asynchronous(비동기) image

  • 1번 작업이 끝날 때까지 메인 스레드를 막고 기다린다.
  • 다른 큐에 보내는 것 같지만 실질적으로 처리는 메인 스레드에서 진행한다.

‏‏‎ ‎

DispatchQueue.global().sync {

}
  • 원래 작업이 진행되고 있던 곳(메인스레드)에서
  • 디스패치 글로벌 큐로 보낸 작업을
  • 동기적으로 기다린다.

‏‏‎ ‎

동기(Synchronous) VS Asynchronous(비동기) image

위에 task1,2,3() 메서드들은 시작 - 완료 사이에 `sleep(1,2,3)` 이 있는데,

동기 작업이라면 그 시간을 기다렸을 텐데, 비동기 작업이여서

오른쪽 위에 0.0002 초만에 작업이 끝난 모습이다.

(물론 완료 프린트 문은 수 초가 지난 다음에 찍힌다.)

동기(Synchronous) VS Asynchronous(비동기) image

동기적으로 처리한 경우엔, 8.002초가 걸린다.

‏‏‎ ‎

결론

  • 비동기는 작업을 다른 스레드로 보내고 즉시 리턴
  • 동기는 작업을 다른 스레드로 보내고 완료될 때 까지 기다린다.
  • 비동기는 서버와의 통신(네트워크 작업) 때문에 필요하다.
    • 예) URLSession
  • 일을 시키고 끝날 때까지 기다리느냐 안 기다리느냐가 포인트

'CS > 동시성' 카테고리의 다른 글

5. GCD 사용시 주의해야할 사항  (0) 2022.09.26
4. 디스패치 큐의 종류  (0) 2022.09.26
3. 직렬과 동시  (0) 2022.08.31
1. GCD 와 Operation  (0) 2022.08.31
0. 동시성 프로그래밍의 필요성  (0) 2022.08.31
Comments