GCD-异步全局队列
来源:互联网 发布:mysql的全文索引 编辑:程序博客网 时间:2024/04/29 19:40
异步: 表示的是任务,任务有同步和异步,异步任务是可以同时执行的,同步反之
队列: 表示的是是否开启多线程.队列有并发和串行,并发里的异步任务是可以同时执行的,串行队列里无论是异步还是同步任务都是依次执行的.
多个任务,如果想要同时执行,那么需要两个条件,一是设为异步,表示该任务可以同时执行.还需要加入到队列当中.
队列有全局队列和主队列,全局队列表示可以开辟多个线程,来供异步任务同时执行,而主队列只能让异步任务依次执行,也就无法同时执行了.
so…
我们看两段代码来理解一下:
//这里主要写异步任务+全局队列 for (NSInteger i = 0; i < 10; ++i) { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"%zd -- %@", i, [NSThread currentThread]); }); }//输出: 2016-12-21 21:31:41.085 GCD的探索[65996:2385901] 0 -- <NSThread: 0x600000263680>{number = 4, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385919] 2 -- <NSThread: 0x600000263740>{number = 6, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385899] 1 -- <NSThread: 0x6000002637c0>{number = 5, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385920] 3 -- <NSThread: 0x600000263800>{number = 7, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385915] 4 -- <NSThread: 0x600000263700>{number = 8, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385901] 5 -- <NSThread: 0x600000263680>{number = 4, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385919] 6 -- <NSThread: 0x600000263740>{number = 6, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385920] 8 -- <NSThread: 0x600000263800>{number = 7, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385899] 7 -- <NSThread: 0x6000002637c0>{number = 5, name = (null)}2016-12-21 21:31:41.085 GCD的探索[65996:2385921] 9 -- <NSThread: 0x6080002788c0>{number = 9, name = (null)}
上面这段代码可以清晰的看到for循环了十次,但是输出的内容却不是从0-9依次输出的,而是0,2,1,3.
然而这说明了什么?
这说明了for循环了十次,有十个输出语句,这十个输出语句每个都做为一个异步的任务,加入到了dispatch_get_global_queue(0, 0)该全局队列,也称为并发队列.并发队列可以让异步任务同时执行.所以我们可以看到输出0后,紧跟着输出了2,就好比0到9,这十个数字在进行百米赛跑一样,0先跑到终点,紧跟着2也跑到了终点,然后是1等等等..
那么我们再看下面一段代码:
//同样是一异步任务+全局队列. dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (NSInteger i = 0; i < 10; ++i) { NSLog(@"%zd -- %@", i, [NSThread currentThread]); } });
这段代码与第一段有点小小的差异.在block中写了一个for循环,那么会不会像第一段代码那样不按顺序输出呢?答案是不会….为什么呢?因为该for循环作为一个异步任务加到了并发队列,而第一段代码是每个输出语句作为一个异步任务,即: 第一段代码有10个异步任务同时执行,第二段代码有一个异步任务.
嗯…
0 0
- GCD-异步全局队列
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- GCD主队列、全局队列
- ios-day19-02(GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务)
- iOS GCD/主队列/并行队列/全局队列/串行队列/同步任务/异步任务区别 含代码
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- iOS中多线程知识总结:进程、线程、GCD、串行队列、并行队列、全局队列、主线程队列、同步任务、异步任务等
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- iOS中多线程知识总结:进程、线程、GCD、串行队列、并行队列、全局队列、主线程队列、同步任务、异步任务等(有示例代码)
- GCD全局队列与主队列
- GCD主队列死锁和全局队列
- Swift3 GCD全局队列(global)的优先级
- GCD自定义的队列 和 全局队列的区别
- 关于GCD 队列,同步异步的理解
- GCD之 串行队列,并行队列,全局队列,主线程队列
- 刀哥多线程全局队列gcd-09-global_queue
- UI 实现多线程方式之四 GCD之全局队列
- #Paper Reading# Dual Learning for Machine Translation
- 满满的都是爱
- VMware中三种网络连接的区别
- Dark感觉不错的一篇文章。Redis主从复制和集群配置
- Linux common commands
- GCD-异步全局队列
- iOS 域名解析
- 配置Project分环境打包时遇到的问题
- Oracle 数据字典详解
- XMPP学习3-IM即时消息
- remote: Permission to CocoaPods/Specs.git
- 气泡法排序
- 零碎知识总结
- role属性解析