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之并行串行区别的更多相关文章

  1. GCD同步异步 串行并行大解析

    /** 核心概念 任务:block里需要执行的操作 队列:把任务添加进入队列中,按照先进先出的原则来执行任务  串行队列:一个一个的执行 并行队列:可以让多个任务并发(同时)执行(自动开启多个线程同时 ...

  2. Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程

    1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...

  3. activiti并行和串行区别

    多实例还有并行.串行区分.以下解释一下什么是并行与串行 并行代表同时进行,如把任务分给5个人来处理,这5个人同时会收到任务,并且可以同时处理,不受各自的影响. 串行代表工作或任务由一个人完成后,再由另 ...

  4. GCD编程-串行队列与并发队列

    接着上面的GCD封装,以下进行列子验证 1.导入GCD.h 2.创一个串行队列: - (void)serailQueue{ //创建出队列 GCDQueue *queue =  [[GCDQueue  ...

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

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

  6. IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

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

  7. iOS:对GCD中 同步、异步、并行、串行的见解

    1.GCD-同步执行多线程时          GCD中不管向什么类型的队列加同步任务,实际上都会加到当前线程中(一般为主线程). 2.GCD-异步执行多线程时          GCD中不管向什么类 ...

  8. ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)

    现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序 ...

  9. iOS:转载:同步、异步、并行、串行的详解

    理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21 ...

随机推荐

  1. Eclipse安装Hibernate插件快速生成配置文件

    Eclipse安装Hibernate插件快速生成配置文件 插件链接: http://pan.baidu.com/s/1mi3KVtI 密码: kmjg 1.安装插件: 1.在eclipse顶部窗口he ...

  2. Windows权限提升基础知识和命令

    介绍 这篇文章是介绍window的权限提升,虽然不是一个全面的指南,但会试图覆盖主要的技术,常用的资源列表在文章底部,可供大家参考. window权限提升基础知识 初始信息收集 在开始提权之前,我们需 ...

  3. Hadoop 如何退出安全模式

    在name node 上运行如下命令 hadoop dfsadmin -safemode leave

  4. 单表ORM框架

    基本描述 1.首先是一个单表的ORM框架,多表连接查询请使用视图或者使用SqlHelper查询,然后转换成实体集合. 2.目前仅完成基本结构和MySQL部分. 3.目前欠缺Lambda表达式解析,所以 ...

  5. kappa系数在评测中的应用

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7091315.html 前言 最近打算把翻译质量的人工评测好 ...

  6. win10下移动硬盘位置不可用无法访问

    win10下移动硬盘位置不可用无法访问 网上搜索得到的答案是: 请参考以下步骤解决: 1.按Windows+R输入"CHKDSK H: /F /R"(H:是硬盘所在盘符./R 找到 ...

  7. select选择框在谷歌火狐和IE样式的不同

    select选择在不同浏览器不同的显示样式, 在IE中 虽然默认和谷歌一样,但是当点击时向下 按钮消失, 解决方法如下: select { /*Chrome和Firefox里面的边框是不一样的,所以复 ...

  8. C# 获取exe、dll中的图标,支持获取256x256分辨率

    在网上找过许多文章,都没有成功获取过大图标,只能获取最大32x32.最后自己尝试了相关的windows api,终于找到一个可用的. 主要用到的C++的PrivateExtractIcons函数,具体 ...

  9. JavaScript中你所不知道的Object(二)--Function篇

    上一篇(JavaScript中你所不知道的Object(一))说到,Object对象有大量的内部属性,而其中多数和外部属性的操作有关.最后留了个悬念,就是Boolean.Date.Number.Str ...

  10. java 多线程(0) Java线程

    线程 线程是系统调度的基本单元,每当创建一个进程时,会有许多的线程,也叫轻量级进程,在一个进程中拥有多个线程,各自都有自己的计数器,堆和局部变量属性,并且能够分享内存变量. 为什么要使用多线程  1. ...