2016 - 1 -17 GCD主队列与全局队列
一:主队列
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主队列与全局队列的更多相关文章
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)
进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...
- 2016 - 1 -17 GCD学习总结
一:GCD中的两个核心概念,队列与任务: 1.任务:执行什么操作.(代码块 block) 任务执行的类型分为以下两种: 1.1同步执行任务:在当前线程执行任务.不会开辟新的线程. 1.2异步执行任务: ...
- 更新日志(建议升级到2016.12.17) && 更新程序的方法
更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...
- 【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况
异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { ...
- Murano Weekly Meeting 2016.05.17
Meeting time: 2016.May.17 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1 ...
- 2016.8.17上午纪中初中部NOIP普及组比赛
2016.8.17上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1335 本来觉得自己能考高分,但只得160分,并列第九.至少又挤 ...
- 2016.9.17初中部下午NOIP普及组比赛总结
2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...
- IOS 主队列,全局队列的关系
同步,异步,串行,并发 同步和异步代表会不会开辟新的线程.串行和并发代表任务执行的方式. 同步串行和同步并发,任务执行的方式是一样的.没有区别,因为没有开辟新的线程,所有的任务都是在一条线程里面执行. ...
- GCD调度组、自定义队列来实现多个下载任务
#define KURL1 @"http://img0.imgtn.bdimg.com/it/u=79920747,2237302485&fm=90&gp=0.jpg&quo ...
随机推荐
- 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法
在网上有坑,各种解决方法都有,但似乎我这台64位机器不太给面子,都不能解决: 结果自己找到了解决办法,总结了一下,大多数软件出问题,如果卸载了重新装还是出现问题,一般都是注册表残留的问题: 将ecli ...
- css3实现超过两行文字,超出用三个点显示(兼容性不行,仅供学习)
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- hdu 1072 Nightmare (bfs+优先队列)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1072 Description Ignatius had a nightmare last night. H ...
- Git入门及上传项目到github中
最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...
- Servlet后续的尾(yi)巴--------Filter过滤器
-------载录自 http://www.blogjava.net/yangaiyou/archive/2007/08/29/140854.html 感谢博主心如止水 一心向佛 描写出这么的具体 ...
- 初学Java之Pattern与Matcher类
import java.util.regex.*; public class Gxjun{ public static void main(String args[]) { Pattern p; // ...
- win7_oracle11g_64位连接32位PLSQL_Developer
工具/原料 已经装好的64位Oracle数据库 window7_64位的操作系统 PLSQL_Developer 9.0以上版本(目前只有32位的):下面有下载连接! 官方的 instantcli ...
- lucene索引文件格式
转自:http://blog.csdn.net/whuqin 本文介绍下lucene生成的索引有哪些文件组成,每个文件包含了什么信息.基于Lucene 4.10.0. 数据结构 索引(index)包含 ...
- 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- Git工作流指南:集中式工作流
转载:http://blog.jobbole.com/76847/ 本文由 伯乐在线 - 李鼎 翻译.未经许可,禁止转载!英文出处:atlassian.欢迎加入翻译组. 转到分布式版本控制系统看起来像 ...