<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Actor on Kelly Dev</title><link>https://kelly-chui.github.io/tags/actor/</link><description>Recent content in Actor on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 25 Aug 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://kelly-chui.github.io/tags/actor/index.xml" rel="self" type="application/rss+xml"/><item><title>Swift Concurrency. Behind the Scenes - WWDC21</title><link>https://kelly-chui.github.io/posts/wwdc-swift-concurrency-behind-the-scenes/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swift-concurrency-behind-the-scenes/</guid><description>&lt;h2 id="threading-model"&gt;Threading model&lt;/h2&gt;
&lt;p&gt;뉴스 피드 리더 앱을 예로 들어보자. 앱의 상위 컴포넌트는 다음과 같이 나눌 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;사용자 인터페이스를 담당하는 메인 스레드&lt;/li&gt;
&lt;li&gt;사용자가 구독한 뉴스 피드를 추적하는 데이터베이스&lt;/li&gt;
&lt;li&gt;최신 콘텐츠를 가져오는 네트워킹 서브시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;사용자가 최신 뉴스를 요청하면 다음과 같은 흐름으로 처리할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;메인 스레드에서 이벤트 제스처 처리&lt;/li&gt;
&lt;li&gt;데이터베이스 작업을 처리하는 직렬 큐로 요청을 비동기적으로 디스패치
&lt;ul&gt;
&lt;li&gt;작업을 다른 큐로 보내면 메인 스레드는 데이터베이스 작업을 기다리지 않고 사용자 입력에 계속 반응할 수 있다.&lt;/li&gt;
&lt;li&gt;직렬 큐가 상호 배제를 보장하므로 데이터베이스 접근을 순서대로 처리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;데이터베이스 큐에선 사용자가 구독한 피드에 URLSession을 통해 콘텐츠를 다운로드하는 네트워크 요청을 스케줄링&lt;/li&gt;
&lt;li&gt;결과가 도착하면 URLSession의 콜백이 Delegate Queue 위에서 호출되어서 각 결과의 Completion Handler가 동기적으로 데이터베이스를 업데이트한다.&lt;/li&gt;
&lt;li&gt;MainThread를 깨워서 UI를 리프레시한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;보기에는 합리적인 방법이다. 메인 스레드를 블록하지 않으면서 네트워크 요청을 동시에 처리할 수 있기 때문이다.&lt;/p&gt;</description></item><item><title>Swift Concurrency. 01. 도입 배경</title><link>https://kelly-chui.github.io/posts/swift-concurrency-01-introduction/</link><pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/swift-concurrency-01-introduction/</guid><description>&lt;p&gt;Swift Concurrency는 Swift 5.5에서 도입된 기능이다. &lt;code&gt;Foundation&lt;/code&gt;을 import 해야 쓸 수 있는 GCD와 다르게, Swift 언어 자체에 내장된 동시성 모델이다.&lt;/p&gt;
&lt;p&gt;Swift Concurrency는 크게 두 가지 부분으로 나뉘어진다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;async&lt;/code&gt;, &lt;code&gt;await&lt;/code&gt; 로 작성하는 새로운 동시성 모델&lt;/li&gt;
&lt;li&gt;애플리케이션을 여러 동시성 태스크로 분할하는 Actor&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이 포스트에서는 Swift Concurrency의 도입 배경을 알아본다.&lt;/p&gt;
&lt;h2 id="gcd의-한계"&gt;GCD의 한계&lt;/h2&gt;
&lt;p&gt;GCD는 Objective-C에서부터 사용해온 애플이 만든 비동기 API다. Queue 기반으로 작업을 스케줄링 하고, 스레드 위에서 추상화 되어있기 때문에 스레드를 직접 생성하거나 관리할 필요가 없다.&lt;/p&gt;</description></item></channel></rss>