一:主队列

1.概念:每一个应用程序对应唯一一个主队列,直接GET即可;在多线程开发中,使用主队列更新UI

       dispatch_queue_t q = dispatch_get_main_queue();

2.特性:首先是一个程序里只有唯一一个主队列,专门负责调度主线程里的任务,不会允许开辟新的线程。主队列也是串行队列。

比如在主队列中的异步任务,虽然是异步的,但任务们最终都只在主线里执行,代码如下:

- (void)test5{
// 获得主队列(每一个应用程序中对应唯一一个主队列)
dispatch_queue_t queue = dispatch_get_main_queue();
NSLog(@"开始!!");
for (int i = ; i < ; i ++) {
dispatch_async(queue, ^{
NSLog(@"当前操作咋%@线程 --- 任务号 = %d",[NSThread currentThread],i);
});
}
NSLog(@"结束"); }

打印结果:

2016-01-17 22:14:04.658 wdqdqw[14457:1222706] 开始!!

2016-01-17 22:14:04.659 wdqdqw[14457:1222706] 结束

2016-01-17 22:14:04.659 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 0

2016-01-17 22:14:04.659 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 1

2016-01-17 22:14:04.659 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 2

2016-01-17 22:14:04.660 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 3

2016-01-17 22:14:04.660 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 4

2016-01-17 22:14:04.660 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 5

2016-01-17 22:14:04.660 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 6

2016-01-17 22:14:04.660 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 7

2016-01-17 22:14:04.686 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 8

2016-01-17 22:14:04.686 wdqdqw[14457:1222706] 当前操作咋<NSThread: 0x7fa698d09ef0>{number = 1, name = main}线程 ---  任务号 = 9

会发现一个很有意思的现象,只有在test5这个函数执行完毕后,才会调用任务里的内容(也就是block里的内容),原因如下:

一个线程只能同时执行一个任务,当前主线程在异步任务被放进主队列里后,由于是异步任务,不会立马执行,就会先执行test5这个函数,等函数执行完毕了,主线程才会继续执行主队列里的任务,于是出现了上面的 先打印”开始“”结束“在打印任务号等等。

需要注意的是,如果吧上面的任务改为同步任务,也就是说需要立马执行,那么主线程就会阻塞。原因如下:

如果是同步任务,那么队列里的任务就需要立马到主线里去执行。但是由于主线程里的test5还没执行完,同步任务就会没法到主线程里去。而test5又必须等同步任务执行完(同步任务必须立即被执行),他才会能执行完毕,所以造成了死锁,堵塞了主线程。

二:全局队列

1.概念:是一个并行队列 ,与主队列类似,使用get方法即可获得

dispatch_get_global_queue;

2.特性:与创建的并行队列相比较:

2.1.全局队列没有名称,但创建的有。

2.2.全局队列是所有程序共享的。

2.3.在MRC中,并行队列需要手动释放,而全局队列不需要。

2016 - 1 -17 GCD主队列与全局队列的更多相关文章

  1. IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)

    进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...

  2. 2016 - 1 -17 GCD学习总结

    一:GCD中的两个核心概念,队列与任务: 1.任务:执行什么操作.(代码块 block) 任务执行的类型分为以下两种: 1.1同步执行任务:在当前线程执行任务.不会开辟新的线程. 1.2异步执行任务: ...

  3. 更新日志(建议升级到2016.12.17) && 更新程序的方法

    更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

  4. 【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况

    异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { ...

  5. Murano Weekly Meeting 2016.05.17

    Meeting time: 2016.May.17 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary:   1 ...

  6. 2016.8.17上午纪中初中部NOIP普及组比赛

    2016.8.17上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1335 本来觉得自己能考高分,但只得160分,并列第九.至少又挤 ...

  7. 2016.9.17初中部下午NOIP普及组比赛总结

    2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...

  8. IOS 主队列,全局队列的关系

    同步,异步,串行,并发 同步和异步代表会不会开辟新的线程.串行和并发代表任务执行的方式. 同步串行和同步并发,任务执行的方式是一样的.没有区别,因为没有开辟新的线程,所有的任务都是在一条线程里面执行. ...

  9. GCD调度组、自定义队列来实现多个下载任务

    #define KURL1 @"http://img0.imgtn.bdimg.com/it/u=79920747,2237302485&fm=90&gp=0.jpg&quo ...

随机推荐

  1. Java GC系列(4):垃圾回收监视和分析

    本文由 ImportNew - lomoxy 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 在这个Java GC系列教程中,让我们学习 ...

  2. easyui的基本用法

    之前有用过extjs,最近发现easyui和fineui和extjs比较类似,并且稍微简单一点,所以考虑使用. 以下是项目中的具体简单应用 function callback2d(data) {//d ...

  3. hdu--(1025)Constructing Roads In JGShining's Kingdom(dp/LIS+二分)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  4. IE5,IE6,IE7,IE8的css兼容性列表[转自MSDN]

    CSS 2.1:   IE 5.0 IE 5.5 IE 6.0 IE 7.0 IE8 Beta 1 IE8 Beta 2 IE 8.0 @charset No Yes Yes Yes Yes Yes ...

  5. PLSQL DEVELOPER 连接远程数据库 OCI客户端安装方法

    安装使用过PLSQL Dev都知道,要连接数据库,必须配置TNS(Transparence Network Substrate),而直接安装PLSQL Dev 之后,本机是没有Oracle HOME的 ...

  6. JDE处理选项

    处理选项为JDE的一种数据结构,命名方式如下: The name of a data structure can be a maximum of characters-only if you begi ...

  7. shell学习记录001-知识点储备

    1.BASH(bourne again shell ) cmd1 ;cmd2等同于 cmd1 cmd2 2.echo music; 中的分号不被打印出,因为分号默认为命令定界符号 3.利用pgrep找 ...

  8. 重点关注之Filter的使用(性能计数和错误处理)

    Web API中的filter与MVC中的filter非常类似,最主要的不同是,MVC中的filter放在命名空间System.Web.Mvc下,而Web API中的filter则放在命名空间Syst ...

  9. 在Excel中引用其他宏

    在excel的使用过程中,会用到一些自定义函数,可以使用宏轻松的实现这些功能,问题是必须使用“启用宏的excel”,这样用户每次打开时都要启用宏. 现用以按背景色计划为例,解决以上问题: 1.新建一个 ...

  10. Android 浮动搜索框 searchable 使用(转)。

    Android为程序的搜索功能提供了统一的搜索接口,search dialog和search widget,这里介绍search dialog使用.search dialog 只能为于activity ...