• 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
    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则会在后台添加到指定的线程运行。

  • 相关阅读:
    JS运动---运动基础(匀速运动)
    浅谈浏览器解析 URL+DNS 域名解析+TCP 三次握手与四次挥手+浏览器渲染页面
    浅谈JS重绘与回流
    浅谈JS函数节流及应用场景
    浅谈JS函数防抖及应用场景
    前端模块化(CommonJs,AMD和CMD)
    Git之SSH公钥与私钥
    vi/vim编辑器必知必会
    git笔录
    vue移动端弹框组件,vue-layer-mobile
  • 原文地址:https://www.cnblogs.com/yulei126/p/6783236.html
Copyright © 2020-2023  润新知