关于同步和异步的一些总结(dispatch)
来源:互联网 发布:云计算谁提出的 编辑:程序博客网 时间:2024/04/26 21:38
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue1, ^{ NSLog(@"第一次读图片1"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"更新图片"); }); });
由于很多情况下下载要很长时间,所以为了有更好的用户体验就需要进行异步操作
这样就可以模仿上述的方式进行书写
由于更新图片需要在主线程里面运行
所以在新的线程里面获得了image之后需要回到main_queue进行更新
话说在同样一个线程里面运行两条语句的时候是随机运行的
用另一个例子可能更加明白
dispatch_queue_t queue3 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue3, ^{ NSLog(@"第一次读图片3"); }); dispatch_async(queue3, ^{ NSLog(@"第二次读图片3"); }); dispatch_async(queue3, ^{ NSLog(@"第三次读图片3"); }); dispatch_async(queue3, ^{ NSLog(@"第四次读图片3"); });
结果是:
2013-04-19 19:18:47.352 demoForAsync[575:12303] 第一次读图片3
2013-04-19 19:18:47.356 demoForAsync[575:13203] 第四次读图片3
2013-04-19 19:18:47.353 demoForAsync[575:12403] 第二次读图片3
2013-04-19 19:18:47.355 demoForAsync[575:12f03] 第三次读图片3
很明显是没有规律的
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue1, ^{ NSLog(@"第一次读图片1"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"更新图片"); }); }); dispatch_async(queue1, ^{ NSLog(@"第二次读图片1"); });
然后可以看一下文档
关于dispatch_get_global_queue
第一个参数有四种
是不是很熟悉
貌似mfc里面有很多这样的东西
优先级越高获得资源就越多(大神教导我说可以看下操作系统,以后再看吧。。。)
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue1, ^{ NSLog(@"第一次读图片1"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"更新图片"); }); }); dispatch_async(queue1, ^{ NSLog(@"第二次读图片1"); }); dispatch_queue_t queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); dispatch_async(queue2, ^{ NSLog(@"第一次读图片2"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"更新图片"); }); }); dispatch_async(queue2, ^{ NSLog(@"第二次读图片2"); });
看这个,猜下会怎样
这个是结果啦
2013-04-19 19:08:08.159 demoForAsync[442:12503] 第二次读图片2
2013-04-19 19:08:08.158 demoForAsync[442:12403] 第一次读图片2
2013-04-19 19:08:08.160 demoForAsync[442:12c03] 第二次读图片1
2013-04-19 19:08:08.159 demoForAsync[442:12303] 第一次读图片1
2013-04-19 19:08:08.232 demoForAsync[442:11303] 更新图片
2013-04-19 19:08:08.237 demoForAsync[442:11303] 更新图片
不过如果再运行一次,有可能发现前四个顺序不一样
2013-04-19 19:09:27.671 demoForAsync[455:12403] 第一次读图片2
2013-04-19 19:09:27.672 demoForAsync[455:12503] 第二次读图片2
2013-04-19 19:09:27.672 demoForAsync[455:12303] 第一次读图片1
2013-04-19 19:09:27.674 demoForAsync[455:12c03] 第二次读图片1
2013-04-19 19:09:27.742 demoForAsync[455:11303] 更新图片
2013-04-19 19:09:27.745 demoForAsync[455:11303] 更新图片
看同一时间的时候两个所到达的那个数字的大小就可以知道两者所获得资源的大小
如下
dispatch_queue_t queue4 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); dispatch_queue_t queue5 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); __block int i = 0; __block int j = 0; dispatch_async(queue4, ^{ for (; i < 1000; i++) NSLog(@"i=%d", i); }); dispatch_async(queue5, ^{ for (; j < 1000; j++) NSLog(@"j=%d", j); });就不贴结果了,结果是高优先的先做完的
给个demo,不想打可以看一下
- 关于同步和异步的一些总结(dispatch)
- Java中关于同步,异步,多线程,多线程同步,并发,并行的一些总结
- 关于okhttp的同步消息和异步消息总结(java中)
- Ajax 同步 和 异步 的一些笔记
- 关于同步和异步
- 关于同步和异步
- 关于DWR的同步和异步问题!
- 关于AJAX同步和异步的研究
- 关于ajax的同步和异步
- 关于同步和异步调用显示,增加用户体现总结
- 关于C#.net同步异步SOCKET通讯和多线程总结
- 同步和异步(程序执行的同步和异步,传输的同步和异步)
- 关于同步异步、阻塞非阻塞的一些回答(简明扼要,准确精辟)
- 问题--关于同步和异步
- dispatch同步的使用方法
- iOS多线程的初步研究(七、八、九)-- dispatch对象-- dispatch队列-- dispatch源-- dispatch同步
- iOS GCD dispatch多线程 同步异步
- 关于JQUERY里的AJAX缓存和同步异步问题
- bash-alias永久保存
- 解决iframe,div在移动设备上实现局部刷新的方法
- git init 与 git init --bare
- Tomcat虚拟目录的配置
- 《网络渗透技术》学习笔记(3)——一段穿透防火墙的Shellcode汇编代码分析 zz
- 关于同步和异步的一些总结(dispatch)
- Ubuntu与windows解码出现乱码问题的解决
- Linux XSI IPC 之信号量
- Linux下Socket编程的端口问题( Bind(): Address already in use )
- Big Endian与Little Endian区别
- IOS开发库
- 联想笔记本f31 WinXP后找不到无线信号
- vi/vim常用命令 zz
- 重载运算符