并发编程食谱
Swift并发编程的实用解决方案
Swift并发编程的使用可能非常困难。我认为记录和分享你在使用过程中可能遇到的解决方案和风险会很有帮助。我绝对不是说这是全面的,或者这里提供的解决方案都很棒。我也在学习中。非常欢迎贡献,尤其是针对问题的贡献!
目录
风险
以下是贯穿整个食谱中提到的风险的简要定义:
- 时机:存在多个选项,但会影响事件实际发生的时间。
- 顺序:非结构化任务意味着顺序由调用者决定。仔细考虑依赖关系、多次调用和取消。
- 缺乏调用者控制:定义始终控制actor上下文。这与其他线程模型不同,你无法更改你不控制的定义。
- 可发送性:跨隔离域的类型必须是可发送的。这并不总是容易做到,对于你无法控制的类型,可能根本做不到。
- 阻塞:Swift并发使用固定大小的线程池。占用后台线程可能导致延迟甚至死锁。
- 可用性:并发正在迅速发展,一些API需要最新的SDK。
- 异步传染性:将函数变为异步会影响其所有调用点。这可能导致大量更改,每个更改又可能影响后续调用点。
- Actor重入性:多个线程可以进入Actor的异步方法。Actor的状态可能在等待期间发生变化。
贡献和协作
我很乐意听到你的声音!可以通过mastodon、issue或pull request与我联系。
我更喜欢协作,如果你有类似的项目,我很乐意找到合作的方式。
参与此项目即表示你同意遵守贡献者行为准则。