swift 中的并发17 Mar 2025 | 4 分钟阅读 在本教程的前一节中,我们讨论了 Swift 中的 GCD 概念,它允许 Swift 中的多线程。 在本教程的这一部分中,我们将讨论 Swift 中线程的并发执行。 我们还将包括 GCD 使用的队列类型和 QoS 类。 正如我们已经提到的,Grand-Central-Dispatch (GCD) 使用 Dispatch 队列,该队列用于任务提交,其中任务以先进先出的方式执行。 在 iOS 中,进程或应用程序包含一个或多个线程; 操作系统负责独立于彼此地调度和管理线程。 但是,每个线程都可以并发执行。 操作系统决定哪些线程将并发执行,以及何时执行。 存档并发最常用的方法之一是时间片,其中每个线程都被赋予相同的执行时间,并且系统在每个时间间隔执行上下文切换。 时间片主要在单核系统中存档。 另一方面,多核系统可以使用并行性来同时执行多个线程。 但是,GCD 构建在线程之上; 它管理一个共享线程池,我们可以在其中添加代码块到调度队列。 GCD 始终根据系统和可用资源来决定所需的并行量。 调度队列正如我们已经在上一节中讨论的那样,GCD 在调度队列上运行。 swift 中的调度队列是 DispatchQueue 的一个实例,我们将任务提交到此队列。 GCD 以先进先出的顺序执行调度队列中的任务。 在这里,调度队列是线程安全的,可以由多个线程同时访问。 但是,队列可以是并发的或串行的。 顾名思义,串行队列在给定的时间内仅执行一个线程。 在这里,GCD 决定了执行时序。 我们永远无法知道执行单个任务所花费的时间。 ![]() 另一方面,并发队列同时执行多个任务。 我们永远无法知道开始下一个任务需要多少时间。 任务将以添加的相同顺序开始执行。 但是,它们可能会以不同的顺序结束。 我们无法假设一次运行的线程数。 ![]() 这里,这取决于 GCD,何时启动线程。 如果两个线程的执行重叠,GCD 还会决定是否在不同的核心上运行任务。 GCD 有三种类型的队列可用。
QoS 类当任务发送到全局队列时,我们指定服务质量类属性。 QoS 类确定任务的优先级,然后允许 GCD 执行它们。 系统中存在以下几类 QoS 类。
后台: 这些是在应用程序后台运行的任务。 用户不知道这些任务。 这些任务用于预取、下载、上传、维护和其他类似任务。 这必须在后台全局优先级队列中执行。 下一个主题处理后台任务 |
我们请求您订阅我们的新闻通讯以获取最新更新。