GCD - 1
来源:互联网 发布:搜索网站排名优化策略 编辑:程序博客网 时间:2024/05/16 03:20
上几篇我们学习了iOS中对线程控制最直观的类NSThread,这里我们进入iOS对于多线程强大的机制GCD
首推三篇好的文章:
文顶顶: http://www.cnblogs.com/wendingding/p/3806821.html
kenshicui:http://www.cnblogs.com/kenshincui/p/3983982.html#GCD
简书:http://www.jianshu.com/p/0b0d9b1f1f19
先从头文件开始对GCD的学习:
iOS的GCD是全C的风格的,由这个文件所提供:
iOS提供了大量的关于GCD的方法,我们这里并不全部详述,而挑出重点的来讲述,学习基本的类和方法之前来了解一下基础的知识,这里直接转用上面参考的文顶顶大神的图,十分详述易懂!
我们要了解的几个概念是:
1.并发队列 和 串行队列
2.同步 和 异步
3.并发 和 串行
基础的知识直接看文顶顶大神的,简单易懂,强大! 有上面的图片我们可以知道只有异步函数 加 并发队列才能实现开启新线程 和 并发执行任务,贴上文顶顶大神的一段代码:
第一种最值得讨论的情况:异步函数添加并发队列
//用异步函数往并发队列添加任务- (void)viewDidLoad{ [super viewDidLoad]; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSLog(@"下载图片1 ---- %@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片2 ---- %@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片3 ---- %@", [NSThread currentThread]); }); NSLog(@"主线程 --- %@", [NSThread mainThread]);}
分别运行三次,结果如下:
1.
2.
3.
我们惊讶的发现这几个异步执行的先后顺序是不可把控的,因为我们不知道线程在runloop执行的状态所以无法把控!
讨论另外一种情况异步函数添加串行队列:
//用异步函数往串行队列中添加任务- (void)viewDidLoad{ [super viewDidLoad]; NSLog(@"主线程 --- %@", [NSThread mainThread]); dispatch_queue_t queue = dispatch_queue_create("async_series", NULL); dispatch_async(queue, ^{ NSLog(@"下载图片1 ---- %@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片2 ---- %@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片3 ---- %@", [NSThread currentThread]); });}
很明显只开辟了一个线程(具备开辟新线程能力,这个线程是自己手动创建的,区别于上面的全局或者说后台线程,是系统分配的,可以同时创建多个的),因为在异步函数上赋予的是同一个线程,执行顺序必须等待先进入队列的完成后才执行block方法。故为同步执行,存在阻塞情况。
- GCD - 1
- 1 gcd 最大公约数算法
- Subtraction Game 1+gcd
- 【原创】GCD编程 - 1
- GCD实例1
- iOS GCD详解1
- GCD 多线程(1)
- GCD多线程(1)
- GCD多线程1
- GCD队列组1
- 最大公约数GCD 1
- iOS 之 GCD(1)
- hdu5726 GCD 多校1
- GCD收录1
- gcd
- GCD
- GCD
- GCD
- LeetCode 221: Maximal Square
- 网页中的表单
- KNN分类算法的实现
- spring-boot 使用log4j
- JAVA 重写
- GCD - 1
- Leetcode126: Search for a Range
- 归并排序
- HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法
- Android studio导入项目报错failed to find Build Tools revision 19.0.0
- 一、Hadoop单机版standalone的安装与配置(Hadoop1.2.1,CentOS6.5)
- Android onClick
- 单调递增最长子序列
- (6)python语句嵌套