iOS GCD 自定义并发队列执行顺序

2023-12-08

我对这个问题有疑问, 根据苹果公司的文件

同时 并发队列(也称为全局调度队列的一种)同时执行一个或多个任务,但任务仍按照添加到队列的顺序启动。当前正在执行的任务在由调度队列管理的不同线程上运行。在任何给定点执行的任务的确切数量是可变的,并且取决于系统条件。 在 iOS 5 及更高版本中,您可以通过指定 DISPATCH_QUEUE_CONCURRENT 作为队列类型来自行创建并发调度队列。此外,还有四个预定义的全局并发队列供您的应用程序使用。有关如何获取全局并发队列的更多信息,请参阅获取全局并发调度队列。

我使用示例代码进行了测试,

  dispatch_queue_t concurrentQueue;
    concurrentQueue = dispatch_queue_create("com.gcd.concurrentQueue",
                                                 DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(concurrentQueue, ^{
         NSLog(@"First job ");
    });
    dispatch_async(concurrentQueue, ^{
        NSLog(@"Second job");
    });

    dispatch_async(concurrentQueue, ^{
        NSLog(@"Third job ");
  });

但结果似乎不是按照添加的顺序,这是结果,

2015-06-03 18:36:38.114 GooglyPuff[58461:1110680] First job 
2015-06-03 18:36:38.114 GooglyPuff[58461:1110682] Third job
2015-06-03 18:36:38.114 GooglyPuff[58461:1110679] Second job

所以我的问题是,不应该吗 第一第二第三 ?

欢迎任何建议,并感谢您的帮助。


“并发”意味着它们同时运行,并且不应假设它们中的任何一个在任何给定时刻将在其进程中的哪个位置以及哪个将首先完成。这就是并发的全部含义和含义:在一个并发操作中的一行代码和下一行代码之间 - 甚至during一行代码 - 任何其他并发操作中的任何其他事情都可能发生。

因此,为了回答您的特定问题,这些任务可能有started按照已知的顺序,但这发生得非常快,在那之后他们progress是不可预测地交错的。您的 NSLog 调用是该进展的一部分;他们不会也不可能告诉您任务何时开始!

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

iOS GCD 自定义并发队列执行顺序 的相关文章

随机推荐

  • 如何在不影响 Pyqt5 中的小部件的情况下向主窗口添加背景图像

    我想在主窗口中添加背景图像 而不更改其中按钮的背景图像 并且还需要保持纵横比 我尝试过 self centralWidget setStyleSheet background image url The Project logo png b
  • 将 \u200e 解码为字符串

    在 Python3 中 我收到以下错误消息 ValueError time data u200e07 30 200702 38 PM does not match format m d Y I M p from datetime impor
  • 静态类与单例类

    我知道这个话题已经被讨论了一遍又一遍 但我仍然有一个疑问 我希望有人可以帮助我或指导我找到一篇关于 SO 的现有帖子 在传统的C语言中 静态变量存储在数据段中 局部变量存储在堆栈中 我认为与局部变量相比 静态变量的存储和维护成本更高 正确的
  • 如何从标准化数组中获取原始数据

    下面给出了一段简单的代码 它按行规范化数组 import numpy as np from sklearn import preprocessing X np asarray 1 2 1 4 1 2 dtype np float X nor
  • 制作自定义 django 视图装饰器(带参数)时遇到问题

    因此 我阅读了所有类似的问题并复制了他们写的内容 但我仍然遇到问题 所以我想要这样的东西 Yes I know django has one but I want to make my own rate limit seconds 10 m
  • Excel Jet OLE DB:插入日期时间值

    OLEDB 可用于读取和写入 Excel 工作表 考虑以下代码示例 using OleDbConnection conn new OleDbConnection Provider Microsoft Jet OLEDB 4 0 Data S
  • 禁用 Laravel 中的日志记录?

    是否有任何全局配置选项来禁用所有日志记录 我的意思不仅仅是禁用错误记录 我的意思是在调用 Log 时实际上禁用写入文件 如果您不想写入日志文件 您可以简单地注释掉文件中的以下行start global php Log useFiles st
  • 如何在java中使用LinkedHashMap从sql server数据库填充下拉列表

    在 SQL Server 数据库中 我有一个表 其中包含三列 即 Ref Name Ref from 和 Ref to 现在我想要一个下拉列表来按行保存值 即该行的所有列值应按以下方式位于下拉列表中 参考 1 2014 10 10 07 1
  • PostGIS 中的缓冲区(圆形)

    我必须扩展普通的 GeoJSON 格式以添加一些不受支持的多边形 例如圆 type Circle radius 0 001 coordinates 5 417075157165527 43 29129488122568 这是一个例子 坐标标
  • Doctrine2 在复合主键中映射具有复合外键的实体

    我有一个有很多表的模型 但在本例中我们只需要三个 关键是 1 的复合主键也是外键 复合脚趾 Symfony 抛出此异常 MappingException 无法映射实体 你的 SomethingBundle Entity Empleado 使
  • 如何将执行延迟到 os.system 完成之后?

    我在用os system将文件从一个系统复制到另一个系统 一个非常简单的程序的逻辑是在复制该文件后执行另一组命令 问题是os system实际上并不等待文件被复制 而是开始执行下一行 这会导致系统出现问题 我实际上可以通过提供一些等待功能t
  • 将 setHours 设置为零在 NodeJs 中不起作用

    我正在尝试获取当前日期进行比较并将时间设置为零但仍然有时间 var today new Date new Date setHours 0 0 0 0 var todaynew today toISOString console log to
  • 如何将 JSON 响应映射到自定义类对象

    我正在使用 C 调用 APIUnirest io 我得到以下 JSON 响应 如响应体 persons id a010 name Joe subjects Math English id b020 name Jill subjects Sc
  • 使用模态窗口或弹出窗口打开表单

    对此我有些挣扎 我有一个数据表表单 其中列出了每条记录的 ID 和其他信息 到目前为止 我已经找到了一些 VBA 代码 它将每个 ID 作为超链接打开并将其传递到另一个表单中 我遇到的问题是我希望在弹出窗口或模式窗口中打开表单 到目前为止我
  • 如何在 JSF 中的 EL 表达式 #{ } 中写入硬编码字符串值?

    我正在尝试执行以下操作 rendered billBean company equals something 但问题是我不会写 something inside 它会导致以下 XML 解析错误 元素类型 h commandLink 后面必须
  • 指定 jar 的类路径

    我正在尝试配置 JAR 的类路径 以便我的 ResourceBundle 可以从中获取属性文件 如果我从 class 文件运行它并指定 cp标记它工作正常 并且System err println System getProperty ja
  • Android 和 IOS 上的 Qt 会话管理

    我目前正在使用 Qt Quick Controls 2 开发一个适用于 Android 和 IOS 的应用程序 该应用程序可以登录 帐户凭据将存储到外部 SQL 数据库中 我已经弄清楚如何与数据库交互 但我无法弄清楚如何在 Android
  • 是否可以等待未声明为异步的 IO 操作?如果没有,我该怎么办?

    我是 C 异步编程的新手 但我仍然对一些事情感到困惑 我读到 在 NET 4 5 之后 不再推荐 APM 和 EAP 用于新开发 因为 TAP 应该取代它们 source 我想我了解 async await 的工作原理 并且我能够使用它们来
  • 垂直居中、高度未知、页面上的其他内容

    好吧 这基本上是常见的 如何使用 CSS 垂直居中 问题 但有一些问题 没有 JavaScript 仅限 HTML 和 CSS 只要当今的浏览器能够很好地支持 CSS3 就可以了 该元素的内容以及高度都是未知的 它可能是几十到几百像素 将来
  • iOS GCD 自定义并发队列执行顺序

    我对这个问题有疑问 根据苹果公司的文件 同时 并发队列 也称为全局调度队列的一种 同时执行一个或多个任务 但任务仍按照添加到队列的顺序启动 当前正在执行的任务在由调度队列管理的不同线程上运行 在任何给定点执行的任务的确切数量是可变的 并且取