iOS GCD不同场景的使用比較
/**
* async --
并发队列
* 会创建线程。一般同一时候开多条
* 并发运行任务
*/
<span style="font-size:14px;">- (void)asyncGlobalQueue
{
// 获得全局的并发队列
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]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片4---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片5---%@", [NSThread currentThread]);
});
}
</span>
<span style="font-size:14px;">-----下载图片4---<NSThread: 0x7fbd52c9b390>{number = 5, name = (null)}
-----下载图片3---<NSThread: 0x7fbd52f00230>{number = 4, name = (null)}
-----下载图片2---<NSThread: 0x7fbd52e3eed0>{number = 3, name = (null)}
-----下载图片5---<NSThread: 0x7fbd52e2eb40>{number = 6, name = (null)}
-----下载图片1---<NSThread: 0x7fbd52c06010>{number = 2, name = (null)}</span>
/**
* async --
串行队列
* 会创建线程, 一般仅仅开1条线程
* 串行运行任务(一个任务运行完成后再运行下一个任务)
*/
- (void)asyncSerialQueue
{
// 1.创建一个串行队列
dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL); // 2.将任务加入到串行队列中 异步 运行
dispatch_async(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片3---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片4---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片5---%@", [NSThread currentThread]);
}); }
-----下载图片1---<NSThread: 0x7fd4c5b00b50>{number = 2, name = (null)}
-----下载图片2---<NSThread: 0x7fd4c5b00b50>{number = 2, name = (null)}
-----下载图片3---<NSThread: 0x7fd4c5b00b50>{number = 2, name = (null)}
-----下载图片4---<NSThread: 0x7fd4c5b00b50>{number = 2, name = (null)}
-----下载图片5---<NSThread: 0x7fd4c5b00b50>{number = 2, name = (null)}
/**
* async --
主队列
*/
- (void)asyncMainQueue
{
// 1.主队列(加入到主队列中的任务。都会自己主动放到主线程中去运行)
dispatch_queue_t queue = dispatch_get_main_queue(); // 2.加入 任务 到主队列中 异步 运行
dispatch_async(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片3---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片4---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片5---%@", [NSThread currentThread]);
});
}
-----下载图片1---<NSThread: 0x7faaca905000>{number = 1, name = main}
-----下载图片2---<NSThread: 0x7faaca905000>{number = 1, name = main}
-----下载图片3---<NSThread: 0x7faaca905000>{number = 1, name = main}
-----下载图片4---<NSThread: 0x7faaca905000>{number = 1, name = main}
-----下载图片5---<NSThread: 0x7faaca905000>{number = 1, name = main}
/**
* sync --
主队列(会卡死)
*/
- (void)syncMainQueue
{
NSLog(@"syncMainQueue----begin--"); // 1.主队列(加入到主队列中的任务,都会自己主动放到主线程中去运行)
dispatch_queue_t queue = dispatch_get_main_queue(); // 2.加入 任务 到主队列中 异步 运行
dispatch_sync(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片3---%@", [NSThread currentThread]);
}); NSLog(@"syncMainQueue----end--");
}
syncMainQueue----begin--
/**
* sync --
并发队列
* 不会创建线程
* 串行运行任务(一个任务运行完成后再运行下一个任务)
* 并发队列失去了并发的功能
*/
- (void)syncGlobalQueue
{
// 获得全局的并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 将 任务 加入到 全局并发队列 中 同步 运行
dispatch_sync(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片3---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片4---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片5---%@", [NSThread currentThread]);
});
}
-----下载图片1---<NSThread: 0x7fe5b2904c30>{number = 1, name = main}
-----下载图片2---<NSThread: 0x7fe5b2904c30>{number = 1, name = main}
-----下载图片3---<NSThread: 0x7fe5b2904c30>{number = 1, name = main}
-----下载图片4---<NSThread: 0x7fe5b2904c30>{number = 1, name = main}
-----下载图片5---<NSThread: 0x7fe5b2904c30>{number = 1, name = main}
/**
* sync --
串行队列
* 不会创建线程
* 串行运行任务(一个任务运行完成后再运行下一个任务)
*/
- (void)syncSerialQueue
{
// 创建一个串行队列
dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL); // 将 任务 加入到 串行队列 中 同步 运行
dispatch_sync(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片3---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片4---%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"-----下载图片5---%@", [NSThread currentThread]);
});
}
-----下载图片1---<NSThread: 0x7fdb40f05020>{number = 1, name = main}
-----下载图片2---<NSThread: 0x7fdb40f05020>{number = 1, name = main}
-----下载图片3---<NSThread: 0x7fdb40f05020>{number = 1, name = main}
-----下载图片4---<NSThread: 0x7fdb40f05020>{number = 1, name = main}
-----下载图片5---<NSThread: 0x7fdb40f05020>{number = 1, name = main}
iOS GCD不同场景的使用比較的更多相关文章
- iOS 开发之 GCD 不同场景使用
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- iOS GCD之dispatch_semaphore(信号量)
前言 最近在看AFNetworking3.0源码时,注意到在 AFURLSessionManager.m 里面的 tasksForKeyPath: 方法 (L681),dispatch_semapho ...
- iOS GCD基础篇 - 同步、异步,并发、并行的理解
1.关于GCD - GCD全称是Grand Central Dispatch - GCD是苹果公司为多核的并行运算提出的解决方案 - GCD会自动利用更多的CPU内核(比如双核.四核) - GC ...
- IOS GCD 使用 (二)
上一节,主要介绍了GCD的基本的概念,这节将用代码深入详细介绍GCD的使用. 一 使用介绍 GCD的使用主要分为三步:创建代码块;选择或创建合适的分发队列;(同步.异步方式)向分发队列提交任 ...
- iOS GCD 编程小结
一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的 ...
- iOS GCD NSOperation NSThread等多线程各种举例详解(拷贝)
2年多的iOS之路匆匆而过,期间也拜读来不少大神的博客,近来突然为自己一直做伸手党感到羞耻,是时候回馈社会.回想当年自己还是小白的时候,照着一些iOS多线程教程学,也只是照抄,只知其然.不知其所以然. ...
- iOS GCD中的dispatch_group
假如有一组任务,A,B,C,D,其中ABC是可以并行的,D是必须在ABC任务完成后再执行的. (举个场景,比如吃饭前必须先做菜.做饭和买饮料,然后才能开吃) 1.关于ABC的并行: 采用多线程的方式就 ...
- ios - GCD简单小结
首先GCD两个名词: 队列 同步异步. 队列: 任务放到队列,队列中的任务执行方式取决于执行队列中任务的方式---同步异步. 串行队列: 任务顺序执行,可以叫阻塞队列.只有前面任务完成才执行后面的. ...
- iOS GCD 与 NSOperationQueue
NSOperationQueue ios NSOperation vs. GCD StackOverflow: NSOperation vs. Grand Central Dispatch Blog: ...
随机推荐
- (3)WPF 布局
一.布局原则 二.布局过程 三.布局容器 核心布局面板 布局属性
- (25)C#windows服务
http://www.cnblogs.com/knowledgesea/p/3616127.html http://jingyan.baidu.com/article/fa4125acb71a8628 ...
- 分享Kali Linux 2017年第23周镜像文件
分享Kali Linux 2017年第23周镜像文件 Kali Linux官方于6月4日发布2017年的第23周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE. ...
- 【bzoj1415】【聪聪和可可】期望dp(记忆化搜索)+最短路
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=57148470 Descrition 首先很明显是 ...
- 八. 输入输出(IO)操作6.文件与目录管理
目录是管理文件的特殊机制,同类文件保存在同一个目录下不仅可以简化文件管理,而且还可以提高工作效率.Java 语言在 java.io 包中定义了一个 File 类专门用来管理磁盘文件和目录. 每个 Fi ...
- Winform打砖块游戏制作step by step第7节---碰撞检测
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinFor ...
- LNMP第一部分环境搭建
1. MySQL安装(同LAMP里面的安装方法)2. php安装wget http://cn2.php.net/distributions/php-5.4.37.tar.bz2tar jxf ph ...
- linux 远程同步数据工具rsync (2)
在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客 户端去连接远程的rsync服务器.如何去配置一台rsync服务器. 首先配置/etc/rs ...
- 关于iframe的高度自适应问题(js)
function SetCwinHeight() { var cwin=document.getElementById("cwin"); if (document.getEleme ...
- Linux下查找、删除、替换命令
查看某目录下所有文件的个数: [root@localhost1 opt]# ls -l |grep "^-"|wc -l 查看某目录下所有文件的个数,包括子目录里面的: [root ...