zoukankan      html  css  js  c++  java
  • GCD队列 调度任务

    1.队列的2大类型

    1> 并发队列:可以同时执行多个任务   * 获取并发队列   并发队列都是全局的:dispatch_get_global_queue(0, 0),不需要管理内存

    2> 串行队列:同一时间内,只能执行一个任务   * 获取串行队列    

    (1) 跟主线程相关联的队列 dispatch_get_main_queue(),不需要管理内存    

    (2) 手动创建队列,dispatch_queue_create("cn.com.queue", NULL),手动管理内存 dispatch_release(queue)

    2.队列中任务的执行顺序:先进先出

    3.开启任务

    1> 开启同步任务 dispatch_sync(queue, ^{

    });

    2> 开启异步任务 dispatch_async(queue, ^{

    });

    4.迭代 dispatch_apply(10, queue, ^(size_t i) {

    });

    5.总结:

    1> 队列的类型只决定任务是并发还是串行执行,不影响同步还是异步

    2> 函数名称决定同步还是异步,dispatch_async代表异步,dispatch_sync代表同步

    #pragma mark 异步串行

    - (void)asyncChuanxing {    

    // 队列的类型只决定并发还是串行执行任务,并不影响同步还是异步    

    // 同步异步取决于函数名        

    // 手动创建一个串行队列    

    dispatch_queue_t queue = dispatch_queue_create("cn.com.queue", NULL);        

    dispatch_async(queue, ^{        

        NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

    });        

    dispatch_async(queue, ^{        

      NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

    });        

    dispatch_async(queue, ^{        

      NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

    });        

    // 释放队列    

      dispatch_release(queue);

    }

    #pragma mark 异步并发

    - (void)asyncBingfa {    

    // 异步执行一个任务    

    // GCD默认提供了3个全局队列,都是并行队列        

    // 获取一个全局队列    

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);        

    dispatch_async(queue, ^{        

       NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

    });        

    dispatch_async(queue, ^{        

      NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

    });        

    dispatch_async(queue, ^{        

       NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

     });

    }

  • 相关阅读:
    [转] Vue + Webpack 组件式开发(练习环境)
    [转] 从零构建 vue2 + vue-router + vuex 开发环境到入门,实现基本的登录退出功能
    [转] Redux入门教程(快速上手)
    [转] 前端数据驱动的价值
    [转] React风格的企业前端技术
    [转] 对Array.prototype.slice.call()方法的理解
    [转] webpack之plugin内部运行机制
    [转] 静态资源的分布对网站加载速度的影响/浏览器对同一域名下并发加载资源数量
    Mysql 版本号、存储引擎、索引查询
    linux 查看CPU、内存、磁盘信息命令
  • 原文地址:https://www.cnblogs.com/wangshengl9263/p/3066429.html
Copyright © 2011-2022 走看看