본문 바로가기

Swift/GCD

(7)
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..
Multithreading with GCD 1 - Queues & Threads GCD(Grand Central Dispatch)의 존재이유? 다양한 크기의 작업을 비동기적으로 실행하고 관리하는 데 사용되는 강력한 기능을 제공합니다. GCD를 사용하면 코드의 구현이 단순해지고, 성능이 향상될 수 있습니다. Threads Thread는 실행 중인 프로세스가 시스템 리소스를 효율적으로 분할하는 방법 중 하나입니다. 즉, 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행될 수 있으며, 각 스레드는 프로세스의 리소스를 공유하여 작업을 처리합니다. 이를 통해 다중 작업을 처리하고, 빠른 응답성과 성능을 보장할 수 있습니다. iOS 앱은 여러 스레드를 활용하여 여러 작업을 실행하는 프로세스입니다. 장치에 있는 코어의 갯수만큼 많은 스레드를 활용할 수 있습니다. (앱의 특정 요구 사항과 하..