GCD概述
来源:互联网 发布:xp仿苹果mac界面主题 编辑:程序博客网 时间:2024/03/28 19:47
GCD概述
GCD —->>>>What
Grand Central Dispatch 简称 (GCD) 是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这简历在任务并行执行的线程池模式的基础上的.它首次发布在 Mac OS 10.6 , iOS 4 及以上也可用.
GCD的工作原理
- 让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务.
- 一个任务可以是一个函数 (Function) 或者是一个* block*. GCD 的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节.
- GCD 中的 FIFO 队列称为 dispatch queue, 它可以保证先进来的任务先得到执行.
队列的类型:
(1)并发队列 (Concurrent Dispatch Queue)
可以让多个任务并发(同时)执行 (自动开启多个线程同时执行任务) 并发功能只有在异步 (dispatch_async) 函数下才有效.
图片
(2) 串行队列 (Serial Dispatch Queue)
让任务一个接着一个的执行 (一个任务执行完毕后,在执行下一个任务)
补充说明
有4个术语比较容易混淆:同步,异步,并发,串行
同步和异步决定了要不要开启新的线程
- 同步: 在当前线程中执行任务,不具备开启新线程的能力
- 异步: 在新的线程中执行任务,具备开启新线程的能力
并发和串行决定了任务的执行方式
- 并发: 多个任务并发 (同时) 执行
- 串行: 一个任务执行完毕后,再执行下一个任务
常用方法
队列类型 dispatch_queue_t
- Serial - dispatch_queue_t dispatch_queue_create( const char *label , dispatch_queue_attr_t attr);
例子:
dispatch_queue_t myQueue = dispatch_queue_create("com.powernode.iOS", NULL);其中,第一个参数是标识队列的,第二个参数是用来定义队列的参数(目前不支持,因此传入NULL)。- Concurrent
dispatch_queue_t dispatch_get_global_queue( long priority, unsigned long flags);
第一个参数:用于指定优先级
#define DISPATCH_QUEUE_PRIORITY_HIGH //高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT //默认 (中)
#define DISPATCH_QUEUE_PRIORITY_LOW //低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND //后台
第二个参数:目前未使用并且应该始终为0- Main dispatch queue
dispatch_queue_t dispatch_get_main_queue(void);
void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 耗时的操作
dispatch_async(dispatch_get_main_queue(), ^{
// 更新界面
});
});dispatch_group_t dispatch_group_create( void ); void dispatch_group_async( dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block);void dispatch_group_notify( dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block);
1 0
- GCD概述
- 多线程 - 06.GCD概述
- Objective C 高级进阶— GCD队列概述
- UI一揽子计划 22 (多线程概述、NSThread、NSOperationQueue 、GCD、多线程管理)
- gcd
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- gcd
- GCD
- ocp-406
- LPC2220调试JATA错误
- 一根绳子
- ocp-407
- 亲历的几个糟糕的应用层通信协议设计
- GCD概述
- ocp-408
- iOS提交后申请加急审核
- JAVA关于静态变量的初始化需要注意的点
- windows 网络基本问题
- ocp-409
- [转]Android客户端和服务端如何使用Token和Session
- enum枚举类型使用
- ocp-410