Swift Concurrency 实际上包含异步和并发两个部分,他们是不同的概念:
* 异步:async/await 语法,让代码不阻塞当前线程,后续代码可以继续执行。
* 并发:使用 Task 与 Actor 等并发原语,控制任务在哪个线程执行。
以下是关于 Swift Concurrency 的几个核心:
1 - 使用异步,并不意味着一定在后台线程执行
实际上,在大部分情况下,任务仍然在调用它的线程中执行 —— 这避免了数据竞争的问题,但仍然可能运行卡顿。
对于耗时但轻量级的任务,使用异步能很好的解决卡顿问题,最常见的场景是处理网络请求。然而,对于一些非常消耗性能的繁重任务,如果在主线程执行,即使使用异步语法,也会导致运行卡顿 —— 因为主线程资源可能被耗尽。
2 - 可以使用 Task 控制任务执行的线程
理想情况下,对于繁重的任务,应当将它从主线程剥离分派到后台线程执行,从而保证 App 界面运行流程