애플에서는 swift를 쓰는데 이때 비동기식으로 작성하는 async/await에 대한 것은 아직 나오지 않았다.

그런데 최근에 이제 이 녀석들이 추가되었고, task, taskgroup, actor등이 새로 나와 비동기적 코드를 좀더 직관적으로 사용할 수 있게 되었다.

swift 이후 GCD를 사용했지만 원래는 obj-c를 메인으로 해서 설계하였기 때문에 정확히는 swift가 GCD를 빌렸다고 할 수 있다.

swift5.5 이후 이제 새로운 async/awaity 모델을 코드에 도입해 보자

이제 새로운 concurrency 모델은 swift에서 안전하게 프로그램을 작성하기 위해 도와주며 아래와 같은 녀석들이 포함된다.

  1. 비동기적 작업에 대한 구조적인 방식으로 만들기 위한 새로운 문법
  2. 비동기적 코드 설계를 위한 표준 API번들
  3. 높은 레벨의 변경들을 os에 직접 통합하는 libdispatch 프레임워크 안의 낮은 레벨의 변화
  4. 안전한 동시성 코드를 제공하기 위한 새로운 수준의 컴파일러

swift5.5에서 사용이 가능하니 버전 체크를 해야 한다.

비동기와 동기 코드의 이해

보통 동기라고 하면 위에서 아래로, 순차적으로 진행된다. 약간 c언어의 느낌 절차지향과 비슷하다고 생각이 들었다. 이는 단일 cpu코어의 하나의 실행 스레드에서 실행될 것이다.

그런데 iOS 및 macOS앱은 비동기적인 녀석들이니 사용자 입력, 네트워크 등 다양한 이벤트에 따라 프로그램을 실행할 수 있다.

주의해야 할 점은 비동기적인 코드에서 여러 비동기 함수가 동일한 스레드를 사용할 때 어떤 함수가 어떤 순서로 실행되는지 알 수 없다.

비동기의 장점은 요청을 하고, 성공여부 콜백을 받을 때까지 cpu가 다른 작업을 할 수 있다는 것이다.