Open kimscastle opened 11 months ago
이러한 방식은 swift에서 권장하는 동시성 이용방법은 아니다
이 경우에는 soup를 만들기 위해서 특정작업을 기다려야하는데 이러한 방식으로 사용하는건 구조화된동시성이아니다
위의 코드처럼 async let을 이용해서 특정작업이 끝난후에 특정작업을 호출할수있는 구조를 만들어줄수있고 이와같은 방식이 swift에서 권장하는 동시성의 이용방법이다
func getA() async -> Int { try? await Task.sleep(for: .seconds(3)) return 3 } func getB() async -> Int { try? await Task.sleep(for: .seconds(5)) return 5 }
async let은 비동기 바인이 가능하게 해주는 방식인데 위의 두개의 코드를 기존의 await을 통해서 사용하게되면
Task { let a = await getA() let b = await getB() print(a+b) }
아래와같이 사용할수있고 이렇게되면 getA의 실해이끝날때까지 suspend되어서 3초후에 getB가실행되고 5초동안 suspend되어서 최종적으로는 8초의 시간이 걸리지만
Task { async let a = getA() async let b = getB() await print(a+b) }
위의 코드는 getA와 getB를 동시에 호출해서 a,b라는 값이 다올떄까지 기다리기때문에 5초의시간밖에 안걸린다
취소를 하더라도 실제로 바로 작업이 취소되지는 않습니다
다만 작업이 취소되었으니 최대한 빨리 작업을 끝내라는 정도의 action만 취하는것이기때문에
작업취소를 명령했을때 최대한 빨리 작업을 끝내게하는건 개발자의 몫이다
우선순위가 더 높은 작업의 결과를 기다리면 작업트리의 자식의 우선순위가 모두 높아진다
우선순위의 상승을 되돌릴 방법은 없다
최초의 loop에서는 동시성작업이 너무많이생성되지 않도록 제한을 둬야합니다(정해진 최대갯수로만)
최대갯수만큼 작업이 실행되면 그중하나가끝나기를 기다린다
작업하나가끝났는데 중지조건을 충족하지 않는다면 새로운 작업을 생성해서 계속 진도를 나간다
이렇게 하면서 그룹내에있는 동시적인 작업의 개수가 제한된다
→ 먼저시작한작업이끝나지 않으면 새작업을 시작하지 않으니까
logger라는게 있는데 스터디때 한번 말해보면 좋을거같다 https://velog.io/@ryan-son/Swift-통합-로깅-시스템으로-로깅-해보자-OSLog https://hereismyblog.tistory.com/31
Swift 동시성 인스트루먼트는 구조화된 작업 간의 관계를 파악할 수 있게 한다
Beyond the basics of structured concurrency
이러한 방식은 swift에서 권장하는 동시성 이용방법은 아니다
이 경우에는 soup를 만들기 위해서 특정작업을 기다려야하는데 이러한 방식으로 사용하는건 구조화된동시성이아니다
위의 코드처럼 async let을 이용해서 특정작업이 끝난후에 특정작업을 호출할수있는 구조를 만들어줄수있고 이와같은 방식이 swift에서 권장하는 동시성의 이용방법이다
async let은 비동기 바인이 가능하게 해주는 방식인데 위의 두개의 코드를 기존의 await을 통해서 사용하게되면
아래와같이 사용할수있고 이렇게되면 getA의 실해이끝날때까지 suspend되어서 3초후에 getB가실행되고 5초동안 suspend되어서 최종적으로는 8초의 시간이 걸리지만
위의 코드는 getA와 getB를 동시에 호출해서 a,b라는 값이 다올떄까지 기다리기때문에 5초의시간밖에 안걸린다
취소를 하더라도 실제로 바로 작업이 취소되지는 않습니다
다만 작업이 취소되었으니 최대한 빨리 작업을 끝내라는 정도의 action만 취하는것이기때문에
작업취소를 명령했을때 최대한 빨리 작업을 끝내게하는건 개발자의 몫이다
우선순위가 더 높은 작업의 결과를 기다리면 작업트리의 자식의 우선순위가 모두 높아진다
우선순위의 상승을 되돌릴 방법은 없다
최초의 loop에서는 동시성작업이 너무많이생성되지 않도록 제한을 둬야합니다(정해진 최대갯수로만)
최대갯수만큼 작업이 실행되면 그중하나가끝나기를 기다린다
작업하나가끝났는데 중지조건을 충족하지 않는다면 새로운 작업을 생성해서 계속 진도를 나간다
이렇게 하면서 그룹내에있는 동시적인 작업의 개수가 제한된다
→ 먼저시작한작업이끝나지 않으면 새작업을 시작하지 않으니까
logger라는게 있는데 스터디때 한번 말해보면 좋을거같다 https://velog.io/@ryan-son/Swift-통합-로깅-시스템으로-로깅-해보자-OSLog https://hereismyblog.tistory.com/31
Swift 동시성 인스트루먼트는 구조화된 작업 간의 관계를 파악할 수 있게 한다