快速理解GCD
来源:互联网 发布:天刀捏脸数据 帅哥 编辑:程序博客网 时间:2024/05/17 08:53
一、什么是GCD
GCD是苹果官方提供的一种多线程自动管理解决方案。全称是Grand Central Dispatch
为什么用它?
它是苹果为多核的并行运算提出的一个解决方案
它会自动利用cpu内核
它会自动管理线程的生命周期(创建、销毁)
只要告诉它想要执行什么任务,不需要编写任何管理线程的代码
结论:这么好当然要用它!
二、什么是任务和队列
脑补1:
2个核心概念:
(1)任务:执行什么操作
(2)队列:用来存放的任务
2个步骤:
(1) 定制任务
(2) 确定想做的事情
结论:将队列添加到队列中,GCD会自动将队列中的任务取出放到对应的线程中执行,遵循队列FIFO原则(先进先出,后进后出)
三、怎么执行任务
有2个用来执行任务的函数
用同步的方式执行任务 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
参数说明:
queue:队列
block:任务
用异步的方式执行任务 dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
有啥区别?
同步:当前线程中执行
异步:在另一个线程中执行
四、怎么使用队列
简单说就2种队列类型,即并发队列和串行队列
并发队列:可以让多个任务并发(同时进行)
创建方法:默认提供了全局的并发队列,供整个应用使用,不需要手动创建。
串行队列:让任务一个接着一个执行
创建方法:2中途径
使用 dispatch_queue_create(<#const char *label#>, <#dispatch_queue_attr_t attr#>) 创建
使用主队列
有四个术语比较容易混淆,容易理解错误
写了几行代码,一目了然
#pragma mark - GCD- (void)testGCD { //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); NSLog(@"\n"); NSLog(@"同步并发队列"); /** 同步并发队列 * 结论:不会开启新的线程,并发队列失去了并发的功能 **/ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); [self syncQueue:queue]; NSLog(@"\n"); NSLog(@"异步并发队列"); /** 异步并发队列 * 结论:同时开启三个子线程 **/ [self asyncQueue:queue]; NSLog(@"\n"); NSLog(@"同步串行队列"); /** 同步串行队列 * 结论:不会开启新的线程 **/ queue = dispatch_queue_create("com233queue", NULL); [self syncQueue:queue]; NSLog(@"\n"); NSLog(@"异步串行队列"); /** 异步串行队列 * 结论:会开启线程,但是只开启一个线程 **/ [self asyncQueue:queue]; }- (void)syncQueue:(dispatch_queue_t)queue { dispatch_sync(queue, ^{ NSLog(@"同步下载 1----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"同步下载 2----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"同步下载 3----%@",[NSThread currentThread]); });}- (void)asyncQueue:(dispatch_queue_t)queue { dispatch_async(queue, ^{ NSLog(@"异步下载 1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"异步下载 2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"异步下载 3----%@",[NSThread currentThread]); });}
- 快速理解GCD
- GCD,快速GCD,扩展GCD
- GCD理解
- GCD理解
- 快速gcd vs 普通gcd
- 快速幂取模 &&gcd
- gcd+lcm+快速幂
- 最大公约数和快速gcd
- 快速GCD算法
- iOS GCD 理解
- GCD 深入理解
- GCD 深入理解
- GCD 的简单理解
- GCD的一点理解
- GCD 深入理解一
- GCD 深入理解二
- GCD理解(一)
- GCD理解(二)
- toolbar自定义右边的菜单注意
- ubuntu更新源
- android 5.0及以上,seekbar thumb 透明效果出现父布局背景颜色的解决方法
- 淘宝首页性能优化实践
- 安全性测试(一)--网页安全检查
- 快速理解GCD
- ios UIScrollView不能响应TouchesBegin:的事件的解决办法
- 如何自己开发一款js或者jquery插件
- 面向对象
- 安全性测试(二)--系统服务器安全检查
- 使用 jQuery 复制文字到剪贴板的技巧
- 安全性测试(三)--数据库安全检查点
- SwaggerUI+SpringMVC-构建RestFul API的可视化界面
- Web应用安全权威指南读书思维导图