GCD之并行串行区别
1.用户自定义线程队列,创建时很容易创建 注意创建时的第一个参数:标记值,方便调试查看
1
2
|
dispatch_queue_t serialqueue=dispatch_queue_create( "serialqueue" , DISPATCH_QUEUE_SERIAL); //串行线程队列 dispatch_queue_t concurrentqueue=dispatch_queue_create( "concurrent" , DISPATCH_QUEUE_CONCURRENT); //并行线程队列 |
2.创建之后那如何验证它是串行还是并行的呢?
第一种:
1
2
3
4
5
6
|
dispatch_apply(5, concurrentqueue, ^(size_t index) { NSLog (@ "%ld" ,index); }); dispatch_apply(5, serialqueue, ^(size_t index) { NSLog (@ "%ld" ,index); }); |
输出结果:
第一个循环输出无序第一个有序,可以看出第一个是多线程并行,第二哥是单线程串行。
第二种:
(1)串行的验证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
dispatch_async(serialqueue, ^{ NSLog (@ "1" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "2" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "3" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "4" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "5" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "6" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "7" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "8" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "9" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "10" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "11" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "12" ); }); dispatch_async(serialqueue, ^{ NSLog (@ "13" ); }); |
输出结果:
可以看到输出结果连续。
(2)并行的验证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
dispatch_async(concurrentqueue, ^{ NSLog (@ "1" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "2" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "3" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "4" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "5" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "6" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "7" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "8" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "9" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "10" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "11" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "12" ); }); dispatch_async(concurrentqueue, ^{ NSLog (@ "13" ); }); |
输出结果:
由此可见:输出结果不连续。
3.从上面的两个输出结果可以看出:串行是在一个线程上执行任务,而并行是在多个线程上执行任务。
GCD之并行串行区别的更多相关文章
- GCD同步异步 串行并行大解析
/** 核心概念 任务:block里需要执行的操作 队列:把任务添加进入队列中,按照先进先出的原则来执行任务 串行队列:一个一个的执行 并行队列:可以让多个任务并发(同时)执行(自动开启多个线程同时 ...
- Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程
1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...
- activiti并行和串行区别
多实例还有并行.串行区分.以下解释一下什么是并行与串行 并行代表同时进行,如把任务分给5个人来处理,这5个人同时会收到任务,并且可以同时处理,不受各自的影响. 串行代表工作或任务由一个人完成后,再由另 ...
- GCD编程-串行队列与并发队列
接着上面的GCD封装,以下进行列子验证 1.导入GCD.h 2.创一个串行队列: - (void)serailQueue{ //创建出队列 GCDQueue *queue = [[GCDQueue ...
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)
进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...
- IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步
进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dis ...
- iOS:对GCD中 同步、异步、并行、串行的见解
1.GCD-同步执行多线程时 GCD中不管向什么类型的队列加同步任务,实际上都会加到当前线程中(一般为主线程). 2.GCD-异步执行多线程时 GCD中不管向什么类 ...
- ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)
现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序 ...
- iOS:转载:同步、异步、并行、串行的详解
理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21 ...
随机推荐
- yii2 无法显示debug条的问题解决方法
显示debug条需要设置三个地方 一.web/index.php defined('YII_ENV') or define('YII_ENV', 'dev');//设置为开发者模式 二.config/ ...
- Andrew Ng机器学习课程笔记--week9(下)(推荐系统&协同过滤)
本周内容较多,故分为上下两篇文章. 本文为下篇. 一.内容概要 1. Anomaly Detection Density Estimation Problem Motivation Gaussian ...
- 3_yum rpm tar 命令及参数
这个就是把上课听课时写下的笔记给复制粘贴过来了,如果写的不够详细或者哪里不明白,可以写在评论下面,我会一一个回复的: 1.yum centos 上 一般是yum 提供了安装包的查找安装及其删除 ...
- C语言:min和max头文件
转自:http://www.cppblog.com/jince/archive/2010/09/14/126600.html min和max头文件 虽然说求最大值最小值函数在哪个头文件下并不是非常重要 ...
- 有哪些关于 Python 的技术博客?
Python是一种动态解释型的编程语言,它可以在Windows.UNIX.MAC等多种操作系统以及Java..NET开发平台上使用.不过包含的内容很多,加上各种标准库.拓展库,乱花渐欲迷人眼.因此如何 ...
- SVN 通过IIS设置反向代理访问
原因 一个字,穷,没办法,只有一台机器 要当测试服务器还要做源码管理. 解决办法 通过IIS配置反向代理访问SVN,给SVN访问的HTTPS绑定上域名,就可以正常访问了. 1.修改SVN配置 把SVN ...
- Microsoft .Net Remoting系列专题之二
Microsoft .Net Remoting系列专题之二 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...
- WebServices 之 WSDL
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt234 一,WSDL概述 WebServices Description La ...
- mysql添加外键约束变为索引
今天有位自己填上一坑:mysql储存引擎 原因就是数据库表引擎为:MyISAM,建立主外键关系需要是InnoDB: 解决方案:alter table table_name1 engine=inno ...
- linux一周学习总结
对于linux,之前也完全没有接触过,完全零基础小白.来到马哥以后,进入学习也有一周时间 ,一周里老师带我们学习了很多指令,下面,我就自己的理解和老师讲授的内容对linux中的一些指令做一个简单的小总 ...