swift 中 DispatchQueue 类型之间的区别

2024-01-18

据我了解,Swift 中有 3 种类型的 DispatchQueue:

  • 主要(连续剧)(主线)
  • 全球(并发)(后台线程并行工作)
  • 自定义(并发或串行)

每一个都可能有效(异步或同步)

第一个问题:

主队列是否在工作仅 UI 线程并且不在另一个线程上工作? 如果答案是肯定的,如何DispatchQueue.Main.async不阻塞 UI 线程。 如果答案是否定的,那么使用的好处是什么DispatchQueue.global只要DispatchQueue.Main.async在另一个线程中工作。

第二个问题:

有什么区别DispatchQueue.global(异步) and DispatchQueue.global(同步)只要这个队列工作同时以及在哪里使用每一个?

第三个问题:

有什么区别

  1. (串行和同步)
  2. (并发和异步)

我认为:

队列不是线程

主队列和全局队列可以在同一线程中工作

已派遣: 表示将任务放入队列

If 全局队列派往主队列 as sync,调度的任务将在同一线程上工作主队列并将已调度的任务添加到全局队列 , 这个任务会冻结线程

If 全局队列派往主队列 as async,调度的任务将在其他线程上工作主队列并将已调度的任务添加到全局队列 , 并且这个任务不会冻结线程

If 主队列派往主队列 as async,调度的任务将在同一线程上工作主队列

If 主队列派往主队列assync 会例外,因为 makedeadlock

调度同步:将任务放入队列并等待完成

异步调度:将任务放入队列中,不等待它完成(任务可以在同一个线程或另一个线程中工作)

  • 如果任务在全局队列上分派并且与主线程一致 然后该任务将被添加到全局队列中,并且新的线程将被添加到全局队列中 创建并且任务将立即在新线程中开始工作

  • 如果任务在主队列上分派并且与主线程一致 那么该任务将添加到主队列中,并且不会工作 立即直到队列中的旧任务完成工作(因为 Main 队列是顺序的)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swift 中 DispatchQueue 类型之间的区别 的相关文章

随机推荐

  • 将 NSTimer 设置为将来触发一次

    如何设置 NSTimer 在将来触发一次 例如 30 秒 到目前为止 我只能将其设置为立即触发 然后每隔一段时间触发 您要使用的方法是 NSTimer scheduledTimerWithTimeInterval NSTimeInterva
  • JSF UrlRewriteFilter 包罗万象/404 替换

    我正在使用 Tuckey UrlRewrite 设置 URL 规则 到目前为止一切正常 但是我正在努力处理我的默认页面 客观的 任何与现有文件不匹配的请求 或者 任何不符合先前规则的请求 应该启动搜索search jsf q 它的目的是处理
  • 在控件的模式弹出扩展器上显示消息框

    我在页面内有一个控件 该控件具有以下模式弹出窗口扩展程序
  • Maven 依赖与多模块?

    对 Maven 非常陌生 有人可以向我解释一下使用 Maven 模块与仅将 Maven 项目的依赖项添加到工作区中的另一个 Maven 项目之间的区别吗 你什么时候会使用其中一种而不是另一种 依赖项是一个预先构建的实体 您可以从 Maven
  • 如何禁用 contenteditable div 中的元素选择和调整大小?

    例如 我有以下布局 div span class text block span Name span a href i class small icon remove i a span div 那么 如何禁用它 和这个 当我尝试完全隐藏控件
  • 列的类型为时间戳,没有时区,但表达式的类型为字符

    我正在尝试在 Redshift 上实施 SCD2 时插入记录 但出现错误 目标表的DDL是 CREATE TABLE ditemp ts scd2 test id INT md5 CHAR 32 record id BIGINT IDENT
  • AutoFixture 3 生成的整数是否唯一?

    生成的整数是IFixture Create
  • Knockout 订阅可观察对象

    我有一个对象 model settings FirstName Joe LastName Bloggs 在我的视图模型中 我将设置设置为可观察的 this Settings ko observable ko mapping fromJS m
  • 如果不存在相同的整行,MySQL INSERT

    我有一个包含 10 列的表 我必须从 CSV 文件添加很多很多行 当然 我不能添加两个相同的行 因此我需要一个 SQL 语句 如果整行确实存在 则忽略该命令 仅当所有字段都相同时才必须忽略 INSERT 两行可能有相同的field1 or
  • ActiveRecord:返回对象时隐藏列

    是否有一种开箱即用的方法可以在返回 ActiveRecord 对象时始终隐藏 删除列 例如 User password 使用内置序列化 您可以覆盖as json模型上的方法来传递其他默认选项 class User lt ActiveReco
  • 如何在 Robolectric 中测试选项菜单项的可见性?

    我想断言菜单项的可见性 但是 我的菜单项总是返回 true 我正在使用以下代码来扩充我的菜单 SherlockMenuInflater inflater new SherlockMenuInflater activity MenuBuild
  • simplecursoradapter textview 给出 nullpointerException

    我有两个 xml 文件 一个是列表视图 另一个是列表视图和一些 texview 的布局 我想更改第二个 xml 文件中文本视图的颜色 这就是我到目前为止所做的 main1 xml
  • Laravel Eloquent `take` 和 `orderBy`

    当我尝试使用每个 take 和 orderBy 查询时 模型返回一些记录 this gt hasMany App User gt take 3 this gt hasMany App User gt orderBy id desc 但是当我
  • 如何在CSS中制作具有透明度的径向渐变

    我想在透明度变化的地方制作一个径向渐变 我可以让它线性工作 但不是径向工作 background webkit gradient linear left top left bottom from rgba 50 50 50 0 8 to r
  • 具有高多边形网格的 OpenGL 3D 光线拾取

    如何在包含高多边形网格的模型的 3D 场景中实现 3D 光线拾取 迭代所有三角形来执行三角形线相交测试需要花费太多时间 我知道存在八叉树等方法 并且应该可以将这些方法用于场景中的模型 但我不知道应该如何在网格级别使用这些概念 但是 如果您在
  • GWT - 如何编译移动排列

    我知道如何使用延迟绑定为不同的用户代理编译 GWT 应用程序 但这似乎没有提供区分桌面 移动浏览器的方法 除了制作基于 gwt mobile webkit 的新应用程序之外 如何将现有的 GWT 应用程序转换为具有重新设计的移动界面 如果您
  • 如何使maven-compiler-plugin不隐藏错误源位置

    也许有一个maven compiler plugin这个选项 但我还没有找到 When javac直接运行并打印错误 在消息的第一行之后 它显示受影响的源行下一行上有一个插入符号指向错误位置 它看起来像这样 com invariantpro
  • 确保泛型类型在 Typescript 中仅具有原始属性

    我有一个采用泛型类型的函数 我需要确保该类型是 JSON 可序列化的 也称为仅原始属性 我的尝试是为 JSON 兼容类型定义一个接口 并强制我的泛型扩展此类型 type JSONPrimitive string number boolean
  • 如何通过按键终止 while 循环?

    我正在读取串行数据并使用 while 循环写入 csv 文件 我希望用户一旦觉得已经收集了足够的数据就能够终止 while 循环 while True do a bunch of serial stuff if the user press
  • swift 中 DispatchQueue 类型之间的区别

    据我了解 Swift 中有 3 种类型的 DispatchQueue 主要 连续剧 主线 全球 并发 后台线程并行工作 自定义 并发或串行 每一个都可能有效 异步或同步 第一个问题 主队列是否在工作仅 UI 线程并且不在另一个线程上工作 如