Dispatch Queues

dispatch queues是执行任务的强大工具,允许你同步或异步地执行任意代码block。原先使用单独线程执行的所有任务都可以替换为使用dispatch queues。而dispatch queues最大的优点在于使用简单,而且更加高效。

dispatch queues任务的概念就是应用需要执行的一些工作,如计算、创建或修改数据结构、处理数据等等。我们使用函数或block对象来定义任务,并添加到dispatch queue。

dispatch queue是类似于对象的结构体,管理你提交给它的任务,而且都是先进先出的数据结构。因此queue中的任务总是以添加的顺序开始执行。Grand Central Disaptch提供了几种dispatch queues,不过你也自己创建。

类型

描述

串行

也称为private dispatch queue,每次只执行一个任务,按任务添加顺序执行。当前正在执行的任务在独立的线程中运行(不同任务的线程可能不同),dispatch queue管理了这些线程。通常串行queue主要用于对特定资源的同步访问。

你可以创建任意数量的串行queues,虽然每个queue本身每次只能执行一个任务,但是各个queue之间是并发执行的。

并发

也称为global dispatch queue,可以并发执行一个或多个任务,但是任务仍然是以添加到queue的顺序启动。每个任务运行于独立的线程中,dispatch queue管理所有线程。同时运行的任务数量随时都会变化,而且依赖于系统条件。

你不能创建并发dispatch queues。相反应用只能使用三个已经定义好的全局并发queues。

Main dispatch queue

全局可用的串行queue,在应用主线程中执行任务。这个queue与应用的 run loop 交叉执行。由于它运行在应用的主线程,main queue通常用于应用的关键同步点。

虽然你不需要创建main dispatch queue,但你必须确保应用适当地回收

应用使用dispatch queue,相比线程有很多优点,最直接的优点是简单,不用编写线程创建和管理的代码,让你集中精力编写实际工作的代码。另外系统管理线程更加高效,并且可以动态调控所有线程。

dispatch queue比线程具有更强的可预测性,例如两个线程访问共享资源,你可能无法控制哪个线程先后访问;但是把两个任务添加到串行queue,则可以确保两个任务对共享资源的访问顺序。同时基于queue的同步也比基于锁的线程同步机制更加高效。

应用有效地使用dispatch queue,要求尽可能地设计自包含、可以异步执行的任务。

dispatch queues的几个关键点:

  • dispatch queues相对其它dispatch queues并发地执行任务,串行化任务只能在同一个dispatch queue中实现。
  • 系统决定了同时能够执行的任务数量,应用在100个不同的queues中启动100个任务,并不表示100个任务全部都在并发地执行(除非系统拥有100或更多个核)
  • 系统在选择执行哪个任务时,会考虑queue的优先级。
  • queue中的任务必须在任何时候都准备好运行,注意这点和Operation对象不同。
  • private dispatch queue是引用计数的对象。你的代码中需要retain这些queue,另外dispatch source也可能添加到一个queue,从而增加retain的计数。因此你必须确保所有dispatch source都被取消,而且适当地调用release。

转载于:https://www.cnblogs.com/Syjh-1991/archive/2013/05/07/3064736.html

Dispatch_queue相关推荐

  1. 深入理解GCD之dispatch_queue

    原文链接深入理解GCD之dispatch_queue 前言 上一篇我们介绍了GCD的结构体,这一篇我们着重看一下GCD中队列的构成.队列是我们在使用GCD中经常接触的技术点. 关键点 主队列和主线程 ...

  2. 09-dispatch_source

    dispatch_source 是BSD系内核惯有的kqueue的包装,kqueue 是XNU内核中发生各种事件时,在应用程序编程中执行处理的技术. CPU 负荷非常小,尽量不占用资源. dispat ...

  3. webSocket详解

    前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入门到&quo ...

  4. 多线程及相关面试题与拓展

    首先,抛出几个面试题,相信看完介绍就会明白怎么解答了. 你理解的多线程? iOS的多线程方案有哪几种?你更倾向于哪一种? GCD 的队列类型 线程安全的处理手段有哪些? OC你了解的锁有哪些? ios ...

  5. 谈Objective-C Block的实现

    来源:http://blog.devtang.com/blog/2013/07/28/a-look-inside-blocks/ 前言 这里有关于block的5道测试题,建议你阅读本文之前先做一下测试 ...

  6. Blocks与Dispatch Queue的使用

    2019独角兽企业重金招聘Python工程师标准>>> block是什么 block是一个C level的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似.用于回调函数的地 ...

  7. block 与 dispatch quene

    深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Ap ...

  8. CocoaAsyncSocket 套接字

    CocoaAsyncSocket   套接字 https://github.com/robbiehanson/CocoaAsyncSocket Asynchronous socket networki ...

  9. Core Data 多线程操作实战篇

    最近在解决百度音乐iPhone客户端偶现数据库操作crash的问题,顺手整理了下CoreData的多线程原则,以及实际开发时应该如何遵守这些原则. Core Data多线程操作的基本原则 不允许跨线程 ...

最新文章

  1. postman断言测试脚本二 (对数据格式和内容匹配测试)
  2. 类型名称了解typename的双重意义
  3. [练习] 用PYTHON来优化网站中的图片
  4. 我所有的博客都在这里了,拿出来晒晒~~
  5. 洛谷 P1352 没有上司的舞会【树形DP/邻接链表+链式前向星】
  6. cast函数_关闭RTTI后dynamic_cast和typeid报异常
  7. [CQOI2009] 中位数 (前缀和)
  8. Sql 行转换列(列转换行), JavaScript解决思路
  9. java阿里云图片检测同/异步sdk调用详解
  10. 阿里云服务器ECS实例规格性能区别及选择攻略
  11. 敲黑板!半步(half-way)反弹格式和标准反弹格式的随堂笔记
  12. java把URL转换成二维码并保存在指定的位置
  13. 减脂期这样购买巧克力,保准躺着瘦
  14. Java基础学习—— IO流
  15. java期末考试复习题_java期末考试复习题及答案
  16. Excel以及Tableau作品集
  17. 数据通信原理_华为面向全球发布Datacom认证 未来三年培养15万数据通信网络人才...
  18. 福娃之路 | 五面阿里算法
  19. MAX30102心率、血氧一种算法
  20. Swift与Objective-C\C\C++混合编程-关东升-专题视频课程

热门文章

  1. mysql获取当前时间_MYSQL proxysql 在深入 信息获取和信息输出
  2. 简单介绍oracle重置序列的方法
  3. 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途
  4. 我认识Linux的小羞愧历史
  5. 32单片机编程简单吗?单片机程序与桌面编程哪个难?
  6. 单片机编程好学吗?单片机初学者怎样看懂代码?
  7. php判断网页编码,python判断网页编码的方法
  8. win8计算机安全模式,安全模式,教您Win8怎么进入安全模式
  9. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》
  10. 0x34.数学 - 矩阵乘法