Dispatch(01)

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
调度数据类型

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值