<?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 Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/actor/</link><description>Recent content in Actor on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 16 Jun 2026 09:06:27 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/actor/index.xml" rel="self" type="application/rss+xml"/><item><title>Swift 面试：并发、async/await 与 Actor 源码解析</title><link>https://amatsuzero.github.io/LastStand/posts/swiftinterviewsourcecode/concurrency-actor-async/</link><pubDate>Tue, 16 Jun 2026 09:06:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/swiftinterviewsourcecode/concurrency-actor-async/</guid><description>&lt;h1 id="swift-面试并发asyncawait-与-actor-源码解析"&gt;Swift 面试：并发、async/await 与 Actor 源码解析&lt;/h1&gt;
&lt;p&gt;Swift Concurrency 面试经常从 &lt;code&gt;async/await&lt;/code&gt; 问起，但真正的重点是：&lt;strong&gt;Task 是结构化并发的执行单元，await 是显式暂停点，Actor 通过隔离和串行执行器保护状态，Sendable 则约束跨并发边界传递的数据。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章按面试题展开，把结论落到 Swift 标准库和编译器源码里的 Actor、GlobalActor、MainActor、AsyncLet、TaskGroup、Sendable 和 ActorIsolation。&lt;/p&gt;
&lt;h2 id="面试高频问题"&gt;面试高频问题&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;async/await 和 GCD 的关系是什么？&lt;/li&gt;
&lt;li&gt;&lt;code&gt;await&lt;/code&gt; 到底表示线程阻塞还是任务暂停？&lt;/li&gt;
&lt;li&gt;Task、async let、TaskGroup 有什么区别？&lt;/li&gt;
&lt;li&gt;Actor 如何保证数据隔离？&lt;/li&gt;
&lt;li&gt;MainActor 是什么，为什么 UI 更新要回到 MainActor？&lt;/li&gt;
&lt;li&gt;GlobalActor 和普通 Actor 有什么区别？&lt;/li&gt;
&lt;li&gt;Sendable 解决什么问题？&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Task.detached&lt;/code&gt; 为什么要慎用？&lt;/li&gt;
&lt;li&gt;Actor 之间调用为什么需要 &lt;code&gt;await&lt;/code&gt;？&lt;/li&gt;
&lt;li&gt;Swift Concurrency 是编译器机制还是运行时机制？&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="30-秒回答版"&gt;30 秒回答版&lt;/h2&gt;
&lt;p&gt;Swift Concurrency 是编译器、标准库和运行时共同完成的并发模型。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;async/await&lt;/code&gt; 不是对 GCD 的简单语法糖。&lt;code&gt;await&lt;/code&gt; 表示当前异步任务可能在这里暂停，把执行权交还给调度器；等异步结果可用时，再从 continuation 恢复。它不应该理解成“阻塞当前线程等待”。&lt;/p&gt;
&lt;p&gt;Actor 是一种受隔离保护的引用类型。Actor 内部可变状态只能在 actor 隔离域内访问；跨 actor 访问必须异步，编译器会插入隔离检查。运行时通过 executor 保证同一 actor 的隔离状态不会被多个任务同时进入。&lt;/p&gt;</description></item></channel></rss>