목록concurrency (5)
study record
1. Stream이란? 스트림(Stream)이란 데이터의 흐름을 의미한다. 이러한 데이터 흐름은 단방향이며, 한번에 일부 데이터를 처리한다. 즉, 데이터를 한번에 모두 처리하지 않고, 데이터가 하나씩 또는 여러 개씩 일정한 간격으로 생성되어 이를 연속적으로 처리하는 방식이다. 스트림은 많은 데이터를 처리하는 경우 유용하며, 여러 개의 데이터를 처리할 때 코드의 가독성과 유지보수성이 좋아진다. 스트림은 실시간으로 데이터를 처리하고, 데이터가 발생하는 즉시 처리할 수 있어 대규모 데이터 처리에 유용하다. 2. AsyncStream이란? An asynchronous sequence generated from a closure that calls a continuation to produce new elemen..
Chapter 5. Intermediate async/await & CheckedContinuation Continuation continuation은 주어진 포인트에 프로그램의 상태를 추적하는 객체이다. 각각의 비동기 작업 단위를 그것을 위한 전체 스레드 하나를 만드는 것 대신에 continuation에 작업을 할당한다. 이것이 concurrency model이 작업을 하드웨어 가용성에 기반해 더 효율적으로 작업하게 한다. 이것이 CPU 코어만큼만 스레드를 만들게 하고, 스레드들 사이의 변환이 아닌 continuation 사이에서 전환하게 한다. await한 작업이 완료되고 원래 코드가 다시 resume되는 것은 어떻게 작동하는가? 코드가 suspend될 때 그 시점의 전체적인 상태를 캡쳐한 conti..
Custom Asynchronous Sequences를 만드는 방법 첫번째 AsyncSequence와 AsyncIteratorProtocol 둘 다를 채택해서 구현 - makeAsyncIterator() 구현 - next async thorws() 구현 두번째 방법 -> AsyncStream - AsyncStream은 AsyncSequence를 채택한다. - AsyncSequence로부터 기본 행동들을 다 상속한다. - 싱글 클로저로부터 값들 produce - sequence의 끝에 값이나 nil을 리턴하는 클로저를 가지는 방법과, continuation을 활용하는 방법이 있다. 🧪 AsyncStream 안의 비동기 메소드 구현에 Task는 꼭 필요한가? let stream = AsyncStream { ..
AsyncSequence 알아가기 AsyncSequence는 비동기적으로 요소들을 생산할 수 있는 sequence를 설명하는 protocol이다. Swift의 Sequence와 비슷하나, 차이점은 다음 요소를 위해 await 키워드를 붙여야 한다는 것이다. 예제에서의 note URLSession.data(for:delegate)는 Data를 리턴. URLSession.AsyncBytes는 URL request로부터 비동기적으로 바이트들을 준다. HTTP 프로토콜은 서버가 partial requests에 대한 허용성을 지원하는지를 정의하게 한다. 만약 서버가 지원하면, 응답에 대한 byte range를 리턴하는 것을 요청할 수 있다. 한 번에 전체 응답을 받는 것 대신에. 그래서 하나의 파일을 얻고자 요청..