Swift

[Swift] 비동기와 async/await

문군_ 2024. 12. 13. 20:37

비동기 처리 문법

비동기 처리 방법

  • 콜백(Callback) 함수
    • 비동기 작업이 완료되면 호출되는 함수를 지정하여 사용
    • 작업의 결과를 처리하거나 다음 작업을 수행하는데 사용
    • 비동기 작업의 인자로 전달되어 작업이 완료되면 호출
  • Delegate
  • completion 클로저
    • Async/await 이전에 사용
    • CompletionHandler의 사용으로 콜백이 연속되어버리는 코드가 많아지는 문제가 생김
  • Async/await
    • 비동기 작업을 동기적으로 처리하는 것처럼 보이게 하는 문법적인 구조
    • async 키워드를 함수 앞에 붙이고, 비동기 작업을 수행하는 부분에 await 키워드를 사용
    • await 는 비동기 작업이 완료될 때까지 함수의 실행을 일시 중지하고, 작업이 완료되면 결과를 반환
      • await 로 마킹된 곳은 potential suspension point(잠재적 일시 중단 지점)로 지정
      • async 로 선언한 함수가 왼료될 때까지 일시 중지 되는 지점
    • async 메소드를 호출하려면 async 메소드 내에서 호출되거나 Task 로 묶어서 호출해야 한다.

Async Await을 처리하는 원리 (스레드 관리)

  • Sync 에서의 스레드 관리
  1. A함수에서 B함수를 호출하면 A함수가 실행되던 스레드의 제어권을 B에게 전달
  2. B함수가 끝날 때까지 해당 스레드는 점유되어 다른 일을 수행하지 않는다.
  3. B함수가 종료되면 A함수에게 다시 스레드 제어권을 반납한다.

  • Async 에서의 스레드 관리
  1. A함수에서 B 함수를 호출하면 A함수가 실행되던 스레드의 제어권을 B에게 전달
  2. B함수는 async이기 때문에 스레드의 제어권을 포기하는 suspend가 가능
    1. suspend: 스레드에 대한 제어권은 system으로 가고 시스템은 스레드를 사용해 다른 작업 수행
    2. resume: 일시 중단된 B함수를 다시 실행한다.
  3. B함수가 종료되면 A함수에게 스레드 제어권을 반납한다.