前面的博文也有写到同步异步,可能是看他人的博文,自己没有实验,感觉理解不深,所以就敲了些代码比较一下串行、并行分别对应的同步、异步。

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
7
8
9
dispatch_async(concurrentqueue, ^{
       NSLog(@"5a");
   });
   NSLog(@"6a");
    
   dispatch_sync(concurrentqueue, ^{
       NSLog(@"5");
   });
   NSLog(@"6");

运行结果:6a和5a的顺序不定, 5 和6的顺序始终是一样的

将上面的代码稍微修改,分别改为都是同步、都是异步、一个同步一个异步四种情况,运行查看结果基本能体会出同步的异步的区别。

3.串行线程队列的同步异步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dispatch_async(serialqueue, ^{
        NSLog(@"5a");
    });
    dispatch_async(serialqueue, ^{
        NSLog(@"5aa");
    });
    dispatch_async(serialqueue, ^{
        NSLog(@"5a1");
    });
    NSLog(@"6a");
     
    dispatch_sync(serialqueue, ^{
        NSLog(@"5");
    });
    NSLog(@"6");

运行结果:

同样多改变同步异步方式,多测试一下,就能感受体会到同步异步的区别。

个人体会:同步:则会阻塞当前线程,等待block添加到指定的线程运行完才返回。异步则不会阻塞当前线程,block则会在后台添加到指定的线程运行。

最新文章

  1. Intent(一.显示使用intent)
  2. IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容
  3. 一个简单的P2P传输程序
  4. URL参数GB2312和UTF-8编码 自动识别
  5. 什么是automatic variable?
  6. 一个完整的JENKINS下的ANT BUILD.XML文件
  7. 《RESTful Web Services》第三章 设计表述
  8. python中 __name__及__main()__的使用
  9. [置顶] fmt日期格式化
  10. 四、spark常用函数说明学习
  11. [转载] ZooKeeper原理及使用
  12. Apache 配置小技巧
  13. pyhton图片合成模块-PIL
  14. iOS 定时器 NSTimer、CADisplayLink、GCD3种方式的实现
  15. CentOS 7安装新版RabbitMQ解决Erlang 19.3版本依赖
  16. Git 提交的正确姿势:Commit message 编写指南
  17. 界面编程之QT的基本介绍与使用20180722
  18. WPF Devexpress GridControl Value与Display转换
  19. iOS推送证书从申请到使用
  20. 安装了IntelliJ IDEA中文输入法光标不跟随处理办法

热门文章

  1. 从 HTTP 到 HTTPS 再到 HSTS
  2. 浅谈CSS模块化
  3. for循环 + setTimeout 结合的烂大街的面试题
  4. 使用php下载的文件打不开,自己用着没问题,客户用就不行?
  5. Just for Today
  6. 启动tomcat错误:Address already in use: JVM_Bind:8081
  7. node.js 89行爬虫爬取智联招聘信息
  8. JavaScript--我发现,原来你是这样的JS(基础概念--灵魂篇,一起来学js吧)
  9. poj 3522 Kruskal
  10. CRC与MD5的异同