본문 바로가기

분류 전체보기

(31)
WWDC 2022 - Eliminate data races using Swift Concurrency 이번 세션의 주제는 data race 문제를 발생시키지 않고 효율적인 동시성 프로그램을 구성하는 전체론적인 Swift Concurrency의 관점을 확인할 것이다. 시작에 앞서 진행자는 concurrency를 바다에 비유한다. 바다에는 곳곳에서 여러 가지 일이 한 번에 진행되어 예측하기 어렵지만, Swift와 함께 신이 되어 바다를 탐색하면, 놀라운 일을 만들어 낼 수 있다고 한다. 그럼 신이 되어 보자. Task isolation Sequential - Concurrency 바다에서 task는 보트다. 즉 main workers이다. 그들은 해야 할 일이 있고 순차적으로 처음부터 끝까지 작업을 수행한다. Asynchronous - 작업은 비동기적으로 수행되고, 어느 순간이던지 await 키워드를 통해서..
Swift Concurrency - Perform asynchronous operation 위 글은 Swift Concurrency 공식문서를 참고했습니다. Concurrency에 대해서 알아보기에 앞서 우린 동시성을 가진 코드를 작성하고 있었다. 예를 들면 사진 이름 리스트를 다운로드하고, 첫 번째 사진을 다운로드하고 유저에게 보여주는 코드라면 listPhotos(inGallery: "Summer Vacation") { photoNames in let sortedNames = photoNames.sorted() let name = sortedNames[0] downloadPhoto(named: name) { photo in show(photo) } } completion handler를 통해서 위와 같은 코드를 작성했을 것이다. 그렇다면 새로운 방식의 Asynchronous 함수를 호출하는 ..
GCD PlayGround 애플은 WWDC 2015부터 2017까지 꾸준히 GCD에 대한 주제를 발표하였다. WWDC 2015 - Building Responsive and Efficient Apps with GCD - https://kswift.tistory.com/21 WWDC 2015 - Building Responsive and Efficient Apps with GCD 시작에 앞서 WWDC 2015에서 소개된 GCD관련 API는 대부분 Swift3.0 이전 버전이기 때문에 현재는 사용되지 않는 것들이 대부분이라 전체적인 흐름과 각 내부 메서드의 역할을 파악하는데 집중했습니다 kswift.tistory.com WWDC 2016 - Concurrent Programming With GCD in Swift 3 - https:/..
WWDC 2017 - Modernizing Grand Central Dispatch Usage Parallelism and concurrency Parallelism - 밀접히 관련된 계산들의 동시 실행 Concurrency - 앱에서 동시에 실행할 독립적 요소의 구성 두 개념을 쉽게 설명하면 병렬처리(Parallelism)는 우리가 일반적으로 여러 코어를 활용하여 동시에 모두 사용하는 것이고, 동시성(Concurrency)은 단일 코어에서도 수행할 수 있다. 동시성은 애플리케이션의 다양한 작업들을 구성(개입시키는)하는 방법이다. Parallelsim with GCD concurrentPerform - 시스템의 모든 코어에서 계산을 자동으로 load balancing 하는 병렬 for loop 💡 Load balancing이란? 부하분산 또는 로드 밸런싱(load balancing)은 컴퓨터 네트..
WWDC 2016 - Concurrent Programming With GCD in Swift 3 Concurrency allows multiple parts of your application to run at the same time. Concurrency(동시성)는 우리의 앱을 동시적으로 여러 부분을 같은 시간에 실행되도록 돕는다. 시스템단에서는, 동시성을 구현하기 위해 thread를 생성한다. CPU 코어는 주어진 시간 동안 스레드를 생성할 수 있다. 그러나 동시성 구현에 대한 payoff, 혹은 페널티는 스레드를 안전하게 유지하기 힘들다는 것이다. GCD GCD는 애플의 동시성 라이브러리, 이는 모든 iOS 기기들의 multi-threaded한 코드를 생성하는데 도움을 준다. Dispatch queue and Run Loops Dispatch queue는 말 그대로 queue에 dispatc..
WWDC 2015 - Building Responsive and Efficient Apps with GCD 시작에 앞서 WWDC 2015에서 소개된 GCD관련 API는 대부분 Swift3.0 이전 버전이기 때문에 현재는 사용되지 않는 것들이 대부분이라 전체적인 흐름과 각 내부 메서드의 역할을 파악하는데 집중했습니다. OS X Snow Leopard에서 소개된 기술 그 당시 최신 기기는 듀얼 코어인 맥북 프로였는데 애플리케이션의 서로 다른 부분을 동시에 실행하면서 두 코어를 모두 활용하고 스레딩을 쉽게 만들 수 있다는 장점이었다. QoS는 시스템에 어떤 종류의 작업을 수행하는지 알려주는 방법. 이를 통해 시스템은 코드를 가장 효과적으로 실행하기 위한 다양한 resource control을 제공한다. resource control이란? 어떤 스레드를 실행할지, 어떤 순서로 실행할지를 결정 - CPU Sheduli..
Multithreading with GCD 3 - Concurrency Problems Dispatch queue에는 앱에서 동시성을 구현할 때 발생할 수 있는 세 가지 잘 알려진 문제가 있습니다. Race conditions (경쟁상태) Deadlock (데드락) Priority inversion (우선순위 역전) Race conditions (경쟁상태) 앱 자체에서 동일한 프로세서를 공유하는 스레드는 같은 주소공간을 공유합니다. 이 의미는 각 스레드들이 같은 공유 리소스를 읽고 쓰려고 한다는 것입니다. 만약 주의를 하지 않으면 같은 타이밍에 같은 변수를 여러 스레드들이 수정하려고 하면서 race condition(경쟁상태)에 빠질 수 있습니다. 두 스레드가 실행중이라고 가정하고 두 스레드 모두 객체의 count 변수를 수정하려고 한다고 가정해 보겠습니다. 읽기와 쓰기는 컴퓨터가 단일 작..
Multithreading with GCD 2 - Groups & Semaphores DispatchGroup DispatchGroup 클래스는 task 그룹의 완료를 추적할 때 사용합니다. DispatchGroup을 정의하고, dispatch queue의 async 메서드에 인자로 그룹을 제공하여 해당 그룹의 일부로 작업을 추적할 수 있습니다. let group = DispatchGroup() someQueue.async(group: group) { ... your work ... } someQueue.async(group: group) { ... more work .... } someOtherQueue.async(group: group) { ... other work ... } group.notify(queue: DispatchQueue.main) { [weak self] in sel..