Dispatch

通过提交工作来调度由系统管理的队列,在多核硬件上执行分配给队列的任务.
GCD在iOS开发中是多线程开发中用的最多的。但是却不是像pthread和NSThread去直接操作线程的,GCD是用一个叫队列的东西来包装了线程,所以我们在开发中只需要操作好队列就可以了。完全不用去管理线程的创建和销毁。这样就大大减少了开发中遇到莫名其妙的bug。
BSD子系统、Core Foundation和Cocoa api都得到了扩展,可以使用这些增强来帮助系统和应用程序更快、更高效地运行,并提高响应能力。考虑一下一个应用程序有效地使用多个内核是多么困难,更不用说在不同计算机上使用不同数量的计算内核,或者在多个应用程序竞争这些内核的环境中使用这些内核了。在系统级别上运行的GCD可以更好地满足所有正在运行的应用程序的需求,以一种平衡的方式将它们与可用的系统资源匹配起来。

Overview

Grand Central Dispatch (GCD)包含语言特性、运行时库和系统增强功能,这些功能为macOS、iOS、watchOS和tvOS中的多核硬件上的并发代码执行提供了系统的、全面的改进。Grand Central Dispatch (GCD)包含语言特性、运行时库和系统增强功能,这些功能为macOS、iOS、watchOS和tvOS中的多核硬件上的并发代码执行提供了系统的、全面的改进。

Grand Central Dispatch (GCD)

Dispatch Objects and ARC

当我们创建我们的APP用OC的编译器,所有的调度都是0C对象。同样如果是ARC环境下,调度对象的创建和释放自动释放和其他对象是一样的。如果不是在ARC的情况需要使用dispatch_retain和 dispatch_release 去创建和释放对象,不可以直接使用Foundation框架的 retain和release.
如果您需要在一个支持arc的应用程序中使用retain/release语义,并在以后的部署目标中(以保持与现有代码的兼容性),您可以通过向编译器标志添加-DOS_OBJECT_USE_OBJC=0来禁用基于objective - c的分派对象。

Dispatch基本概览

1.Managing Dispatch Queues :管理调度队列

GCD提供并管理FIFO队列,应用程序可以以block块对象的形式向其提交任务。提交给调度队列的工作在由系统完全管理的线程池中执行。对于执行任务的线程,不作任何保证。

Dispatch Queue Types:
创建新调度队列时要使用的属性。

Dispatch Queue Label Constants:
dispatch_queue_get_label函数的常量。

dispatch_queue_t:
调度队列是一个轻量级对象,应用程序向其提交Block块以供后续执行。

dispatch_get_main_queue:获取(主线程串行调度队列)
返回与应用程序主线程关联的串行调度队列。

dispatch_get_global_queue:获取(全局并发队列)
返回具有指定服务质量的系统定义的全局并发队列。

dispatch_get_current_queue() (ios 4.0-6.0)
返回当前block正在运行的队列。

dispatch_set_target_queue:
设置给定对象的目标队列。

dispatch_async:异步
在调度队列上提交一个用于异步执行的Block块并立即返回。

dispatch_async_f
提交一个应用程序定义的函数,用于在分派队列上异步执行,并立即返回。

dispatch_sync:同步
在调度队列上提交一个用于同步执行的Block块并立即返回。

dispatch_sync_f
提交一个应用程序定义的函数,用于在分派队列上同步执行。

dispatch_after:延迟操作
将一个Block块放入队列,以便在指定时间执行。

dispatch_after_f
加一个应用程序定义的函数进行排队,以便在指定时间执行。(在指定的时间排队一个应用程序定义的函数以供执行。)

dispatch_apply_f
将一个应用程序定义的函数提交给调度队列以进行多个调用。

dispatch_queue_get_label:获取定义的队列标签,相当于对列名字,自我理解
返回创建队列时为队列指定的标签。

dispatch_get_specific
返回与当前分派队列关联的键的值。

dispatch_queue_set_specific
设置指定调度队列的键/值数据。

dispatch_queue_get_specific
获取与指定调度队列关联的键的值。

dispatch_once_t
用于dispatch_once函数的谓词。

dispatch_once
在应用程序的整个生命周期中,一次且只能执行一次块对象。

dispatch_once_f
在应用程序的整个生命周期中,只执行一次应用程序定义的函数。

dispatch_main
执行提供给主队列的块。

2. Managing Units of Work

调度Dispatch块允许您直接配置队列中各个工作单元的属性。 他们还允许您为了等待完成,收到通知完成和/或取消它们的目的,处理个别工作单位。

dispatch_block_t
提交给调度队列的块原型,不带任何参数,没有返回值。

dispatch_function_t
提交给调度队列的函数原型。

dispatch_block_create
使用现有的块和给定的标志在堆上创建新的分派块。

dispatch_block_create_with_qos_class
在现有块和给定标志的堆上创建一个新的调度块,并为其指定QoS等级和相对优先级

dispatch_block_perform
创建,同步执行,并从指定的块和标志释放调度块。

dispatch_block_wait
同步等待,直到指定的调度块的执行完成,或者直到超过指定的超时时间。

dispatch_block_notify
当指定的调度块的执行完成时,安排通知块被提交给队列。

dispatch_block_cancel
异步取消指定的分派块。

dispatch_block_testcancel
测试给定的调度块是否被取消。

dispatch_block_flags_t
传递给dispatch_block_create和dispatch_block_create_with_qos_class函数的标志位。

3. Prioritizing Work and Specifying Quality of Service

(指定工作优先级和指定服务质量)

Dispatch Queue Priorities
用于选择合适的全局并发队列。包含以下集中
DISPATCH_QUEUE_PRIORITY_HIGH
DISPATCH_QUEUE_PRIORITY_DEFAULT
DISPATCH_QUEUE_PRIORITY_LOW
DISPATCH_QUEUE_PRIORITY_BACKGROUND:

dispatch_qos_class_t
dispatch_queue_attr_t
dispatch_queue_priority_t
dispatch_queue_get_qos_class
dispatch_queue_attr_make_with_qos_class

4. Using Dispatch Groups

分组块允许聚合同步。 您的应用程序可以提交多个块,并在完成时跟踪,即使它们可能运行在不同的队列中。 如果在完成所有指定任务之后才能进行此操作,则此行为会很有帮助。
dispatch_group_t
一组块对象提交到队列以进行异步调用。
dispatch_group_async
将块提交到调度队列,并将块与指定的调度组相关联。
dispatch_group_async_f
将应用程序定义的函数提交给调度队列,并将其与指定的调度组相关联。
dispatch_group_notify_f
当一组先前提交的块对象完成时,安排应用程序定义的函数提交给队列。
dispatch_group_wait
同步等待先前提交的块对象完成; 如果在指定的超时期限过去之前块没有完成,则返回。

5. Using Dispatch Semaphores

调度信号量是传统计数信号量的有效实现。 只有当调用线程需要被阻塞时,调度信号才会调用内核。 如果调用信号量不需要阻塞,则不进行内核调用。

dispatch_semaphore_t
信号量
dispatch_semaphore_wait
等待(递减)信号量。

6. Using Dispatch Barriers

调度阻塞允许您在并发调度队列中创建同步点。 当遇到障碍时,并发队列会延迟屏障块(或任何其他块)的执行,直到在屏障完成执行之前提交的所有块为止。 在这一点上,障碍块自行执行。 完成后,队列恢复正常的执行行为。

dispatch_barrier_async
为异步执行提交barrier块并立即返回。

dispatch_barrier_async_f
提交异步执行的barrier函数并立即返回。

dispatch_barrier_sync
提交barrier块对象执行,并等待该块完成。

dispatch_barrier_sync_f
提交执行的barrier函数,并等待该函数完成。

7. Using Dispatch Data

Dispatch Data Object Constants
表示数据对象的常量

Dispatch Data Destructor Constants
表示用于数据对象的析构函数的常量。

dispatch_data_t
表示内存连续或稀疏区域的不可变对象。

dispatch_data_applier_t
用于调用数据对象中每个连续内存区域的块。

dispatch_data_create
用指定的内存缓冲区创建一个新的调度数据对象。

dispatch_data_get_size
返回由调度数据对象管理的内存的逻辑大小

dispatch_data_create_map
返回包含指定对象内存的连续表示的新调度数据对象。

dispatch_data_create_concat
返回由两个其他数据对象的连接数据组成的新的分派数据对象。

dispatch_data_create_subrange
返回一个新的调度数据对象,其内容由另一个对象的内存区域的一部分组成。

dispatch_data_apply
遍历调度数据对象的内存,并在每个区域执行自定义代码。

dispatch_data_copy_region
返回包含另一个数据对象中的部分数据的数据对象。

8. Using Dispatch Time

Dispatch Time Constants
基本时间常数。

Dispatch Time Multiplier Constants
用于计算时间值的乘数。

dispatch_time_t
一个有点抽象的时间表示。

dispatch_time
创建相对于默认时钟的dispatch_time_t或修改现有的dispatch_time (dispatch_function_t)

dispatch_walltime
根据wall钟创建使用绝对时间的dispatch_time (dispatch_function_t)

dispatch_autorelease_frequency_t
dispatch自动释放频率

9. Managing Dispatch Sources

OS_dispatch_source
定义与所有分派源类型共享的一组公共属性和方法。

Dispatch Source Type Constants
dispatch sources的类型。

Dispatch Source Mach Send Event Flags
Mach发送事件标志(事件记录)。

Dispatch Source Process Event Flags
过程事件标志位。 过滤事件记录

Dispatch Source Vnode Event Flags
文件系统对象事件标志位。

Dispatch Source Memory Pressure Event Flags
内存压力事件标志位。

dispatch_source_t

dispatch_source_type_t
由调度源监视的类型系统对象的标识符。

dispatch_source_mach_send_flags_t mach发送时间标志

dispatch_source_memorypressure_flags_t 系统压力事件标识

dispatch_source_proc_flags_t 过程事件标识

dispatch_fd_t
用于I/O操作的文件描述符。

dispatch_source_create
创建一个新的调度源来监视低级系统对象,并自动提交一个处理程序块到调度队列以响应事件。

dispatch_source_get_data
返回调度源的待处理数据。

dispatch_source_get_handle
返回与指定调度源关联的底层系统操作。

dispatch_source_get_mask
返回调度源监视的事件的掩码。

dispatch_source_merge_data
将数据合并到类型为DISPATCH_SOURCE_TYPE_DATA_ADD或DISPATCH_SOURCE_TYPE_DATA_OR的调度源中,并将其事件处理程序块提交给其目标队列。

dispatch_source_set_timer
为定时器源设置开始时间,间隔和余量值。

dispatch_source_set_registration_handler
为给定的调度源设置注册处理程序块。

dispatch_source_set_registration_handler_f
为给定的调度源设置注册处理函数。

dispatch_source_set_event_handler
为给定的调度源设置事件处理程序块。

dispatch_source_set_event_handler_f
为给定的调度源设置事件处理函数。

dispatch_source_set_cancel_handler
为给定的调度源设置取消处理程序块。

dispatch_source_set_cancel_handler_f
为给定的调度源设置取消处理函数

dispatch_source_cancel
异步取消调度源,阻止任何进一步的调用其事件处理程序块。

dispatch_source_testcancel
测试给定的调度源是否被取消。

dispatch_source_timer_flags_t (时间标识)

dispatch_source_vnode_flags_t (文件系统标识)

10. Managing Dispatch I/O 管理I/O调度

调度I / O通道API允许您管理基于文件描述符的操作。 该API支持基于流的和随机访问语义来访问文件描述符的内容。

Dispatch I/O Channel Types
可能创建的调度I / O通道的类型。

Dispatch I/O Channel Closing Options
关闭调度I / O通道时使用的选项。

Dispatch I/O Channel Configuration Options
配置通道时使用的选项。

dispatch_io_t
一个dispatch I/O通道

dispatch_io_type_t
dispatch I/O 通道类型。

dispatch_io_handler_t
处理程序块用于处理调度I / O通道上的操作。

dispatch_io_close
将指定的通道关闭到新的读取和写入操作。

dispatch_io_close_flags_t
用于指定通道关闭选项的标志类型。

dispatch_io_set_interval
设置调用通道的I / O处理程序的间隔(以纳秒为单位)。

dispatch_io_interval_flags_t
用于指定通道调度间隔的标志类型。

11. Working with Dispatch Objects

GCD提供了调度对象接口,使您的应用程序能够管理诸如内存管理,暂停和恢复执行,定义对象上下文以及记录任务数据等方面的处理。 调度对象必须手动保留和释放,而不是垃圾收集。

dispatch_object_t(调度对象)

dispatch_activate
激活调度对象。

dispatch_debug、(弃用)
关于调度对象编程方式日志调试信息 现在已经弃用

dispatch_debugv (弃用)

dispatch_retain
递增调度对象的引用(保留)计数。

dispatch_release
减少调度对象的引用(保留)计数。

dispatch_get_context
返回对象的应用程序定义的上下文。

dispatch_set_context
将应用程序定义的上下文与对象关联。

dispatch_set_finalizer_f
设置调度对象的终结器函数。

dispatch_assert_queue (维护对象 队列)

dispatch_assert_queue_barrier (维护对象栅栏队列)

dispatch_assert_queue_not

dispatch_introspection_hook_queue_callout_begin (调度_内省_队列_插图——开始)

dispatch_introspection_hook_queue_callout_end (结束)

dispatch_introspection_hook_queue_create (创建)

dispatch_introspection_hook_queue_destroy (破坏)

dispatch_introspection_hook_queue_item_complete (完成)

dispatch_introspection_hook_queue_item_dequeue (出列)

dispatch_introspection_hook_queue_item_enqueue (入列)

dispatch_queue_attr_make_initially_inactive (调度队列——属性-开始——最初-不活跃的)

dispatch_queue_attr_make_with_autorelease_frequency (与调度队列属性自动释放——频繁)

12. Protocols (协议)

OS_dispatch_data (调度数据)

OS_dispatch_group (调度组)

OS_dispatch_io (调度io)

OS_dispatch_object (调度对象)

OS_dispatch_queue (调度队列)

OS_dispatch_queue_attr (调度队列属性)

OS_dispatch_semaphore (调度型号量)

13. Reference

Dispatch Functions
调度方法

Dispatch Enumerations
调度枚举
Dispatch Data Types
调度数据类型

Dispatch(01)相关推荐

  1. GCD介绍(一): 基本概念和Dispatch Queue

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许 ...

  2. .ServletException: Circular view path [index]: would dispatch back to the curren这是springboot

    Springboot 我访问地址的时候出现以下的代码 javax.servlet.ServletException: Circular view path [index]: would dispatc ...

  3. Vue中的情侣属性$dispatch和$broadcast详解

    $dispatch 和 $broadcast 作为一对情侣 ?属性,在 Vue 1.0 中主要用来实现基于组件树结构的事件流通信 -- 通过向上或向下以冒泡的形式传递事件流,以实现嵌套父子组件的通信. ...

  4. 零起点学算法01——第一个程序Hello World!

    零起点学算法01--第一个程序Hello World! Description 题目很简单 输出"Hello World!"(不含引号),并换行. Input 没有输入 Outpu ...

  5. hdu5296 01字典树

    根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...

  6. 20150411--Dede二次开发-01

    20150411--Dede二次开发-01 目录 一.目前市场流行的电子商城系统 1 二.ecshop的介绍 1 三.安装 2 四.echsop 的目录结构 5 五.分析ecshop里面程序的架构 5 ...

  7. (九)单片机串行口 内部结构的讲解 01

    1. 基本概念 常用于数据通信的传输方式有单工.半双工.全双工和多工方式. 单工方式:数据仅按一个固定方向传送.因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集. 半双工方 ...

  8. Python 学习笔记01

    print:直接输出 type,求类型 数据类型:字符串,整型,浮点型,Bool型 note01.py # python learning note 01 print('Hello world!') ...

  9. ACM1881 01背包问题应用

    01背包问题动态规划应用 acm1881毕业bg 将必须离开的时间限制看作背包容量,先将他们由小到大排序,然后在排完序的数组中对每个实例都从它的时间限制开始(背包容量)到它的延长时间进行遍历: 1 # ...

  10. 什么是壳 - 脱壳篇01

    什么是壳 - 脱壳篇01 让编程改变世界 Change the world by program 壳 在自然界中,植物用壳来保护种子,动物用壳来保护身体,我们人类没有壳,但我们有衣服,房子也起到了壳的 ...

最新文章

  1. 网易云音乐IPO现场:丁石石石石石石石石石敲钟
  2. Grounded Theory and Coding Lecture Notes
  3. java 枚举类型enum
  4. Pixhawk之姿态控制篇
  5. 如何学习Linux / 新手入门
  6. Java 中访问路径的问题
  7. python编辑器和python解释器的区别_python编译器和解释器的区别
  8. js设计模式——3.观察者模式
  9. 网站安全检测 Web 安全测试工具
  10. js原生实现贪吃蛇(解决连续键盘事件)
  11. oc中该使用lock还是gcd/syncronize
  12. 怎样配置Tomcat环境变量
  13. 家庭收支记账软件Java
  14. 团队合作开发常用git操作
  15. Windows域控禁用U盘和光盘的策略 【全域策略生效】
  16. 怎样合并磁盘分区?看这里~
  17. 就在那犹豫的一刹那,跌入那深渊
  18. python彩虹图_python绘制彩虹图教程
  19. AWT绘图工具Graphics
  20. Python3 计算空气质量指数AQI

热门文章

  1. 【Python】从0开始写爬虫——扒一下狗东
  2. 天猫精灵 python_天猫精灵控制esp8266点led灯
  3. linux看视频装哪个软件,Ubuntu安装视频播放软件 SMPlayer 14.9.0.7042
  4. python you-get下载视频下载到哪里_python you-get下载哔哩哔哩视频
  5. Mysql 之 缓存更新策略
  6. react-navigation之navigate
  7. Gym 101246(ACM ICPC 2010-2011, NEERC, Southern Subregional Contest Russia, Saratov)
  8. 软件测试用例执行日报,软件测试之测试用例执行.docx
  9. UVA1589 象棋 Xiangqi
  10. 继承MongoDBRepository仓库的模糊查询