GCD (Grand Central Dispatch)

一、队列

分发队列种类:Serial Dispatch Queue(串联)、Concurrent Dispatch Queue(并行)

1.使用用户自己创建的队列

dispatch_queue_t serialQueue=dispatch_queue_create("serial", <strong>DISPATCH_QUEUE_SERIAL</strong>);//
dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrent",<strong>DISPATCH_QUEUE_CONCURRENT</strong>);
*队列销毁(ios6 之前版本需要掉用),dispatch_release(serialQueue);

*通过dispatch_queue_create创建的队列,其默认级别是DEFAULT。可以通过dispatch_set_target_queue设置优先级。

void dispatch_set_target_queue( dispatch_object_t object, dispatch_queue_t queue);

2.使用系统提供的队列
Main Dispatch Queue:当前主线程,是Serial Dispatch Queue。
dispatch_queue_t mainQueue = dispatch_get_main_queue();
Global Dispatch Queue:所有应用程序都可使用。
dispatch_queue_t globalQueue = dispatch_get_global_queue( dispatch_queue_priority_t,0);

dispatch_queue_priority_t:队列级别,共分为4种

#define DISPATCH_QUEUE_PRIORITY_HIGH        2
#define DISPATCH_QUEUE_PRIORITY_DEFAULT     0
#define DISPATCH_QUEUE_PRIORITY_LOW         (-2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND  INT16_MIN

二、队列处理

2.1 延后处理:dispatch_after

如:3秒后执行block中代码。 “uul”指“unsigned long long”。

dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull * NSEC_PER_SEC);//相对时间
dispatch_after(time,dispatch_get_main_queue(),^{...});//
dispatch_walltime//绝对时间

2.2 等待处理(分组):Dispatch Group

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue,^{ ... block 1 });
dispatch_group_async(group,queue,^{ ... block 2 });
dispatch_group_async(group,queue,^{ ... block 3 });

dispatch_group_notify(group,^{... block 4});
执行完代码块1、2、3之后,再执行block 4中的内容。

*dispatch_group_wait 可等待指定时间。

2.3 资源竞争时处理(数据库、文件操作)

使用Serial Dispatch Queue 不存在资源竞争,效率低下

使用Concurrent Dispatch Queue时需使用dispatch_barrier_async

如:执行并列执行完read1、read2、read3 后执行write 1,执行完才执行read 4。

dispatch_async(queue,^{ ... read 1 });
dispatch_async(queue,^{ ... read 2 });
dispatch_async(queue,^{ ... read 3 });

dispatch_barrier_async(queue,^{ ... write 1});
dispatch_async(queue,^{ ... read 4 });
...
2.4 同步、异步 处理

dispatch_async:不等待处理执行结束

dispatch_sync:等待处理执行结束

2.5 暂停、恢复 处理

dispatch_suspend(queue);

dispatch_resume(queue);

2.6 多线程中只执行一次

static dispatch_once_t pred;
dispatch_once(&pred,^{
    /*
    * 初始化
    */
});
2.7 大文件处理

dispatch io






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值