Dispatch简介

GCD(Grand Central Dispatch)中的核心概念是dispatch queue,它按照先到先执行的顺序处理任务,分为并发和串行两种。主要包含主队列、全局队列和自定义队列。主队列与主线程相关联,全局队列有高、中、低三个优先级,用户队列可通过dispatch_queue_create创建。提交任务使用dispatch_async或dispatch_sync,前者异步执行,后者同步执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dispatch Objects

尽管GCD是纯C语言的,但它被组建成面向对象的风格。GCD对象被称为dispatch object。Dispatch object像Cocoa对象一样是引用计数的。最新版本的XCode已经将dispatch objects加入到了ARC大家庭。

Dispatch Queues

GCD的基本概念就是dispatch queue。dispatch queue是一个队列对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或串行的。并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。

GCD中三种队列类型:

    • The main queue: 与主线程功能相同。实际上,提交至main queue的任务会在主线 程中执行。main queue可以调用dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个。

    • Global queues: 全局队列是,并由整个进程共享。进程中存在三个全局队 列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函 数传入优先级来访问队列。

    • 用户队列: 用户队列 (GCD并不这样称呼这种队列, 但是没有一个特定的名字来形容这 种队列,所以我们称其为用户队列) 是用函数 dispatch_queue_create 创建的队列. 这 些队列是在默认情况下的。正因为如此,它们可以用来完成同步机制, 有点像传统 线程中的mutex。

默认情况下,GCD公开有5个不同的队列:运行在主线程中的main queue,3个不同优先级 的后台队列,以及一个优先级更低的后台队列(用于I/O)。另外,开发者可以创建自定义队 列:串行或者并行队列。自定义队列非常强大,在自定义队列中被调度的所有block都将被 放入到系统的线程池的一个全局队列中。

 


提交任务

向一个队列提交任务很简单:调用dispatch_async函数或dispatch_sync。

    • Dispatch_async传入一个队列和一个block。队列会在轮到这个block执行时执行这个 block的代码。函数会立即返回, block会在后台异步执行;

    • Dispatch_sync的使用同dispatch_async,不同的是dispatch_sync会等待block执行 完成后再返回。 

转载于:https://www.cnblogs.com/yybz/p/4043185.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值