GCD

作者: heart_领 | 来源:发表于2018-10-30 15:25 被阅读9次

    一、GCD 简介
    什么是GCD?
    全称是 Grand Central Dispatch
    纯 C 语言,提供了非常多强大的函数
    GCD的优势:
    GCD 是苹果公司为多核的并行运算提出的解决方案
    GCD 会自动利用更多的CPU内核(比如双核、四核)
    GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
    程序员只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码
    二、任务和队列
    将任务添加到队列,并且指定执行任务的函数
    * 任务使用 block 封装
    * 任务的 block 没有参数也没有返回值
    * 执行任务的函数
    * 异步 dispatch_async
    * 不用等待当前语句执行完毕,就可以执行下一条语句
    * 会开启线程执行 block 的任务
    * 异步是多线程的代名词
    * 同步 dispatch_sync
    * 必须等待当前语句执行完毕,才会执行下一条语句
    * 不会开启线程
    * 在当前执行 block 的任务
    三、死锁

    死锁:主线程因为你同步函数的原因等着先执行任务
    主队列等着主线程的任务执行完毕再执行自己的任务
    主队列和主线程相互等待会造成死锁


    阻塞.png
    串行队列.png
    并行队列.png

    四、主队列和全局队列
    主队列
    专门用来在主线程上调度任务的队列
    不会开启线程
    如果当前主线程正在有任务执行,那么无论主队列中当前被添加了什么任务,都不会被调度
    dispatch_get_main_queue();
    全局队列
    为了方便程序员的使用,苹果提供了全局队列 dispatch_get_global_queue(0, 0)
    全局队列是一个并发队列
    在使用多线程开发时,如果对队列没有特殊需求,在执行异步任务时,可以直接使用全局队列
    五、Dispatch Source

    Dispatch Source

    • 其 CPU 负荷非常小,尽量不占用资源
    • 联结的优势

    在任一线程上调用它的的一个函数 dispatch_source_merge_data 后,会执行 Dispatch Source 事先定义好的句柄(可以把句柄简单理解为一个 block )
    这个过程叫 Custom event ,用户事件。是 dispatch source 支持处理的一种事件

    句柄是一种指向指针的指针 它指向的就是一个类或者结构,它和系统有很密切的关系
    HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备表述句柄),HICON(图标句柄)等。这当中还有一个通用的句柄,就是HANDLE,比如下面的语句:


    解释.png

    GCD


    GCD.png

    相关文章

      网友评论

          本文标题:GCD

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