Swift - 并发

Swift - 并发 首页 / iOS入门教程 / Swift - 并发

在本教程的上一部分中,无涯教程讨论了Swift中的GCD概念,该概念允许swift中的多线程。在本教程的这一部分中,无涯教程将快速讨论线程的并发执行。无涯教程还将包括GCD使用的队列类型和QoS类。

正如无涯教程已经提到的,GCD使用分派队列,该队列用于任务提交,其中任务以先进先出的方式执行。在iOS中,进程或应用程序包含一个或多个线程;操作系统的责任是彼此独立地调度和管理线程。

但是,每个线程可以同时执行。操作系统决定哪些线程将同时执行,以及何时执行。归档并发的最常用方法之一是时间分片,其中为每个线程分配了相同的执行时间,并且系统在每个时间间隔执行上下文切换。时间片主要存储在单核系统中。

另一方面,多核系统可以使用并行性来同时执行多个线程。但是,GCD构建在线程的顶部。它管理着一个共享线程池,无涯教程可以在其中添加代码块来调度队列。 GCD始终根据系统和可用资源来决定所需的并行度。

调度队列

正如无涯教程在上一节中已经讨论的那样,GCD在调度队列上运行。 swift中的调度队列是DispatchQueue的实例,无涯教程将任务提交到此队列。 GCD以先进先出的顺序执行调度队列中的任务。在此,调度队列是线程安全的,可以同时由多个线程访问。

但是,队列可以是并发的或串行的。顾名思义,串行队列在给定时间仅执行一个线程。在此,GCD决定执行时间。无涯教程永远无法知道执行单个任务所花费的时间。

Concurrency in swift

另一方面,并​​发队列同时执行多个任务。无涯教程永远无法知道启动下一个任务所花费的时间。任务将以添加的相同顺序开始执行。但是,它们可能以不同的顺序结束。无涯教程无法假设一次运行的线程数。

链接:https://www.learnfk.comhttps://www.learnfk.com/ios/concurrency-in-swift.html

来源:LearnFk无涯教程网

Concurrency in swift

在这里,它取决于GCD何时启动线程。如果两个线程的执行相互重叠,GCD还决定是否在不同的内核上运行任务。

GCD可以使用三种类型的队列。

无涯教程网

  1. 主队列(Main Queue)               -  主队列在主线程上运行,并执行线程的串行执行。
  2. 全局队列(Global Queue)         -  全局队列是并发队列,由整个系统共享。有四个全局队列在不同的优先级上运行。优先级为high,default,low和backgrond,其中背景优先级队列保持最低优先级。
  3. 自定义队列(Custom Queue)  - 开发人员创建自定义队列。它们可以是并发或串行的。

QoS类

当任务发送到全局队列时,无涯教程指定服务质量类属性。 QoS类确定任务的优先级,然后允许GCD执行它们。

系统中存在以下QoS类类别。

  1. 用户交互(User Interactive)    -  当无涯教程在iOS中启动应用程序时,为了获得良好的用户体验,无涯教程需要立即执行一些任务。这些任务是用户交互的,将执行这些任务以获得良好的用户体验。作为开发人员,无涯教程必须将这些任务用于UI更新,事件处理和小的工作量。用户交互任务需要在主线程上执行。
  2. 用户启动(User-Initiated)        -  这些任务由用户从用户界面启动。当用户在应用程序中等待即时结果(例如某些API调用)时,将使用这些异步任务。用户启动的任务在高优先级全局队列中执行。
  3. 实用程序(Utility)                        -   这些是长期运行的任务,通常与进度指示器一起运行。这些类型的线程用于网络,计算,I/O等。这些任务在低优先级全局队列中执行。

Background    -  这些是在应用程序后台运行的任务。用户不知道这些任务。这些任务用于预取,下载,上载,维护和其他类似任务。这必须在后台全局优先级队列中执行。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入剖析Kubernetes -〔张磊〕

算法面试通关40讲 -〔覃超〕

从0开发一款iOS App -〔朱德权〕

从0打造音视频直播系统 -〔李超〕

雷蓓蓓的项目管理实战课 -〔雷蓓蓓〕

手把手教你玩音乐 -〔邓柯〕

零基础实战机器学习 -〔黄佳〕

现代React Web开发实战 -〔宋一玮〕

手把手带你写一个MiniSpring -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)