博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GCD之并行串行区别
阅读量:6372 次
发布时间:2019-06-23

本文共 2244 字,大约阅读时间需要 7 分钟。

1.用户自定义线程队列,创建时很容易创建 注意创建时的第一个参数:标记值,方便调试查看

dispatch_queue_t serialqueue=dispatch_queue_create("serialqueue", DISPATCH_QUEUE_SERIAL);//串行线程队列dispatch_queue_t concurrentqueue=dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);//并行线程队列

 2.创建之后那如何验证它是串行还是并行的呢?

第一种:

dispatch_apply(5, concurrentqueue, ^(size_t index) {        NSLog(@"%ld",index);    });    dispatch_apply(5, serialqueue, ^(size_t index) {        NSLog(@"%ld",index);    });

 输出结果:

第一个循环输出无序第一个有序,可以看出第一个是多线程并行,第二哥是单线程串行。

第二种:

(1)串行的验证:

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)并行的验证:

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.从上面的两个输出结果可以看出:串行是在一个线程上执行任务,而并行是在多个线程上执行任务。

转载地址:http://pljqa.baihongyu.com/

你可能感兴趣的文章
C# 属性事件一些设置说明
查看>>
去除UITableViewheader footer黏性
查看>>
windows2003 iis6.0不能显示asp.net选项
查看>>
xen MacOS
查看>>
如何学好C和C++
查看>>
Gitlab通过custom_hooks自动更新服务器代码
查看>>
python 如何判断调用系统命令是否执行成功
查看>>
Lesson10 vSphere 管理特性
查看>>
memcache 扩展和 memcached扩展安装
查看>>
获取设备列表
查看>>
项目软件集成三方模块,编译中int32和uint32定义冲突解决方法
查看>>
StretchDIBits速度测试(HALFTONE)
查看>>
在.NET Workflo“.NET研究”w 3.5中使用多线程提高工作流性能
查看>>
验证Oracle处理速度
查看>>
Flink - NetworkEnvironment
查看>>
BZOJ4374 : Little Elephant and Boxes
查看>>
javascript类型系统——包装对象
查看>>
springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解...
查看>>
IdHttpServer实现webservice
查看>>
爱立信物联网广州路演
查看>>