一:主队列

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. Echart 商业级数据图表

    简介 最近工作上用到这个图表库,图表丰富,用起来也很方便.纯javascript,可以流畅得运行在PC和移动设备上,兼容大部分浏览器. 支持折线图(区域图).柱状图(条状图).散点图(气泡图).K线图 ...

  2. 解决requestAnimationFrame的兼容问题

    写法: window.requestAnimFrame = (function () { return window.requestAnimationFrame || window.webkitReq ...

  3. Linux编程

    头文件一般位于usr/include目录下,各个子类的头文件位于include子目录下 不知道某个“库函数”需要哪些头文件,使用“man 函数”即可查看 sys/types.h  基本系统数据类型 s ...

  4. uva----11729 Commando war (突击战争)

    G Commando War Input: Standard Input Output: Standard Output “Waiting for orders we held in the wood ...

  5. Java 集合系列 08 Map架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. struts2配置通用action一个顶N个,你还在写一大堆action吗?

    <!-- 通用action!!!约定优于配置 --> <action name="*_*" class="cn.cnsdhzzl.action.{1}A ...

  7. MATLAB 损失函数画图

    损失函数画图 Hinge loss function: \[H(z) = max(0,1-z)\] $\psi$-learning loss function: \[{\phi _s}(z) = \l ...

  8. S1:运算符

    中括号和小括号的用法: 一般而言,对象中的属性的值是通过点(.)运算符来取值,但是考虑到这样一种情况,我们在遍历一个对象的时候,对其中的属性的键(key)是一无所知的,我们怎么通过点(.)来访问呢?这 ...

  9. 河流 tyvj1506

    题目大意: 给出一棵n个节点的有根树,一开始 树根 是一个控制点,现在要增加m个控制点,使得总费用最少. 给出每个节点的父节点以及到父节点的距离,还有这个节点的权值, 一个节点的费用 即它的权值 乘以 ...

  10. parentNode parentElement childNodes children

    首先要了解 parentNode childNodes是W3C标准的. 一下所说都是针对在html中外加chrome浏览器(请原谅我的渣...) 对于html文档而言,可以理解为能分Node树,Ele ...