GCD

作者: 瓊胖子 | 来源:发表于2019-03-11 09:59 被阅读0次

什么是GCD

概述:
Grand Central Dispatch (GCD)包括语言特性、运行时库和系统增强,它们提供了系统的全面改进,支持在macOS、iOS、watchOS和tvOS中的多核硬件上并发代码执行。
BSD子系统、Core Foundation和Cocoa api都得到了扩展,可以使用这些增强来帮助系统和应用程序更快、更有效地运行,并提高响应能力。考虑一下,对于一个应用程序来说,有效地使用多个核是多么困难,更不用说在具有不同数量计算核的不同计算机上或在多个应用程序争夺这些核的环境中进行操作了。GCD在系统级别上运行,可以更好地适应所有正在运行的应用程序的需要,以一种平衡的方式将它们与可用的系统资源进行匹配。

调度对象和圆弧

当你使用Objective-C编译器构建应用时,所有分派对象都是Objective-C对象。因此,当启用自动引用计数(ARC)时,分派对象会像任何其他Objective-C对象一样被保留并自动释放。在不启用ARC时,使用dispatch_retain和dispatch_release函数(或Objective-C语义)来保留和释放分派对象。您不能使用Core Foundation retain/release函数。

如果您需要在一个支持arc的应用程序中使用retain/release语义,并在稍后的部署目标中使用(为了维护与现有代码的兼容性),您可以通过向编译器标志添加-DOS_OBJECT_USE_OBJC=0来禁用基于objective - c的分派对象。

/*
队列执行的优先级
 @typedef dispatch_queue_priority_t
 类型的dispatch_queue_priority
 @constant DISPATCH_QUEUE_PRIORITY_HIGH
 分配到队列的项将以高优先级运行,
 也就是说,队列将在之前被调度执行
 任何默认优先级或低优先级队列。
 @constant DISPATCH_QUEUE_PRIORITY_DEFAULT
 分派到队列的项将在默认情况下运行
 优先级,即队列将被调度以执行
 在调度了所有高优先级队列之后,但是
 在调度任何低优先级队列之前。
 @constant DISPATCH_QUEUE_PRIORITY_LOW
 分配到队列的项将以低优先级运行,
 也就是说,队列最终将被调度执行
 默认优先级和高优先级队列已经
 预定。
 @constant DISPATCH_QUEUE_PRIORITY_BACKGROUND
 分配到队列的项将以后台优先级i运行
 将在所有高优先级队列之后调度执行吗
 计划,系统将运行项目在这个队列上的一个threa
 根据setpriority(2)(即磁盘I/O是thrott)的后台状态
 线程的调度优先级设置为最小值)。
最后总结:
DISPATCH_QUEUE_PRIORITY_HIGH高优先级运行
DISPATCH_QUEUE_PRIORITY_DEFAULT 默认优先级
DISPATCH_QUEUE_PRIORITY_LOW低优先级运行
DISPATCH_QUEUE_PRIORITY_BACKGROUND后台优先级i运行
 */
 dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        for (int i=0; i<10000; i++) {
            NSLog(@"线程==%@ 打印数据==%d",[NSThread currentThread],i);
        }
    });
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        for (int i=0; i<10000; i++) {
            NSLog(@"异步线程==%@ 打印数据==%d",[NSThread currentThread],i);
        }
    });
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        for (int i=0; i<10000; i++) {
            NSLog(@"同步线程==%@ 打印数据==%d",[NSThread currentThread],i);
        }
    });
/*
打印结果
同步线程==<NSThread: 0x600000dc1400>{number = 1, name = main} 打印数据==0
线程==<NSThread: 0x600000d95bc0>{number = 3, name = (null)} 打印数据==0
异步线程==<NSThread: 0x600000d92b80>{number = 4, name = (null)} 打印数据==0
*/

相关文章

  • 多线程之GCD

    GCD介绍 1、GCD简介 2、GCD任务和队列 3、GCD 的基本使用 4、GCD 线程间的通信 5、GCD 的...

  • 扩展GCD(求逆元,解同余方程等等)

    首先要知道gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(|a|,|b|)=gcd(b,a%b)...

  • iOS - GCD

    目录 GCD简介 GCD核心概念 GCD队列的使用 GCD的常见面试题 GCD简介 Grand Central D...

  • iOS-多线程:GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(6种不同组合区别) GCD 线程间的通信...

  • 浅析GCD

    GCD目录: 1. GCD简介 为什么要用GCD呢? GCD可用于多核的并行运算GCD会自动利用更多的CPU内核(...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • iOS 多线程--GCD

    一、GCD基本介绍 1.GCD简介 GCD是Grand Central Dispatch的缩写,GCD是苹果推出的...

  • 自用算法模板(JAVA版)

    一、数论 1)GCD GCD(求最大公约数) QGCD(快速GCD) extGCD(拓展GCD,解决ax + by...

  • GCD介绍

    一、GCD简单介绍 什么是GCD GCD优势 任务和队列 GCD有2个核心概念 GCD的使用就2个步骤 将任务添加...

  • 7.多线程基础(七)GCD加强

    1.GCD串行队列和并发队列 2.GCD延时执行 3.GCD线程组:(的作用) 4.GCD定时器: GCD的实现 ...

网友评论

      本文标题:GCD

      本文链接:https://www.haomeiwen.com/subject/etqkuqtx.html