zoukankan      html  css  js  c++  java
  • IOS之GCD

    GCD是Grand Central Dispatch的简称,它是基于语言的,用来解决多核并行运算。使用GCD,线程完全由系统进行管理,不需要再编写线程代码。

    GCD的核心是:将长期运行的任务拆分成多个工作单元,并将这些单元添加到dispatch queue中,系统会为我们管理这些dispatch queue,为我们在多个线程上执行工作单元,我们不需要直接启动和管理后台线程。

    dispatch queue严格遵循FIFO原则

    serial dispatch queue执行串行任务

    concurrent dispatch queue执行并发任务

    系统会给每个应用提供三个并发dispatch queue,三个queue的区别是优先级。使用dispatch_get_global_queue函数来获取这三个queue:

    //获取默认优先级的全局dispatch queue
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    

     第一个参数用于指定优先级,分别使用DISPATCH_QUEUE_PRIORITY_HIGH和DISPATCH_QUEUE_PRIORITY_LOW两个常量来获取高和低优先级的两个queue;第二个参数目前未使用到,默认0即可。

    使用dispatch_queue_create来创建串行queue:

    dispatch_queue_t queue = dispatch_queue_create("queue name", NULL);//第二个参数是queue属性
    

    dispatch_get_current_queue获取当前queue

    dispatch_get_main_queue获取主线程关联的串行queue

    dispatch_get_global_queue获取全局共享的并发queue

    异步添加任务:dispatch_async、dispatch_async_f

    同步添加任务:dispatch_sync、dispatch_sync_f

    并发迭代:dispatch_apply、dispatch_apply_f

    可以使用dispatch_apply替代for循环

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    size_t count = 10;
    dispatch_apply(count, queue, ^(size_t i) {
        printf("%zd", i);    
    });
    

     dispatch_apply和dispatch_apply_t在迭代执行完后才返回,会阻塞当前线程,可以考虑在其他线程中异步执行。

    dispatch group

    使用dispatch_group_async函数将多个任务关联到一个Dispatch Group和相应的queue中,group会并发地同时执行这些任务。而且Dispatch Group可以用来阻塞一个线程, 直到group关联的所有的任务完成执行。

  • 相关阅读:
    java 内存命令
    sts4 集成 springboot 和 activiti5
    sts4 安装spring xml 的提示。
    去除office 2019 由于您的登录凭据已经过期,的提示。
    「なきゃ」和「なくちゃ」分别是什么的原型?
    能力考必看|推荐三本适合N1和N2能力考练听力的书|帝京日语
    影子练习
    早大前辈分享日本留学生考试(EJU)日语高分经验
    星野源 新垣结衣 结婚
    使Nginx支持更多并发 请求的 Linux内核参数的优化
  • 原文地址:https://www.cnblogs.com/sfce/p/4341694.html
Copyright © 2011-2022 走看看