Swift 공식문서 읽기...Day15

김민종·2021년 9월 1일
0

Swift Doc

목록 보기
15/26

Concurrency

비동기 코드는 잠시 멈췄다가 나중에 다시 실행할 수 있다. 하지만 한번에 한 부분씩 실행할 수 있다. 비동기 코드는 UI를 업데이트를 진행하면서 비교적 시간이 오래 걸리는 작업들을 동시에 할 수 있다. 병렬 코드의 경우 한 시점에 여러가지 코드들이 동시에 실행될수 있다. 병렬 비동기를 사용하는 프로그램은 한번에 여러 작업을 수행한다.
비동기 코드로 인해 추가적인 스케줄링은 복잡성을 증가시킨다. 느리거나 버그가 있는 코드에 동시성을 추가한다고 해서 빨라지거나 맞다는 보장은 없다. 실상은 동시성을 추가하면 코드를 디버깅하기 더어려워 진다.

Defining and Calling Asynchronous Functions
비동기 메서드와 함수는 실행중에 멈출 수 있는 특수한 종류의 메서드이다.
비동기 메서드와 기존 메서드의 차이는 중간에 일시정지하고 위치를 표시한다.
이를 위해 async키워드를 작성한다. 비동기 메서드를 호출하면 해당 메서드가 반환 될 때 까지 일시정지 된다. throw함수에서 try를 작성하는 것과 같이 await키워드를 통해 중단 가능성이 있는 지점을 찾는다. 이러한 일시정지 지점은 스레드 양보라고 부르기도한다.

Calling Asynchronous Functions in Parallel
비동기 코드를 사용한 await 코드는 한번에 하나의 코드를 실행한다.
하지만 이러한 접근 방식의 단점으로는 한번에 하나씩 실행되는 코드가 있기 때문에 사진을 다운받고자 할때 동시에 다운을 받고싶을 경우 하나씩 불러야한다.
이런 주변의 코드들과 병렬로 실행시키고 싶을 때는 let앞에 async를 붙혀 사용한다. 위방식으로 하면 앞선 호출이 모든 호출을 기다리지 않고 실행되게 된다.

Tasks and Task Groups
task는 프로그램의 일부로 비동기적으로 실행할 수 있는 작업 단위이다. 작업그룹을 만들고 하위작업도 추가가능하다. 이는 우선순위와 취소를 제어하고 동적인 수의 작업을 만들 수 있다.
작업은 계층 구조로 정렬된다. 작업과 작업그룹간의 관계 때문에 이를 구조적 동시성이라고 한다.

Unstructured Concurrency
위에서 언급한 것 말고 스위프트는 구조화 되지 않은 동시성도 지원한다. 이 구조화되지 않은 작업은 상위작업이 없다.

Actors
클래스와 마찬가지로 actor도 참조타입이다. 하지만 클래스와 달리 한번에 하나의 작업만 변경 가능한 상태에서 접근이 가능하도록 한다. 이는 여러코드가 actor와 동일한 인스턴스와 상호작용하는 것이 안전하게 된다.

profile
신입 ios개발자입니다!

0개의 댓글