美文网首页
GCD 简述

GCD 简述

作者: 穷小子 | 来源:发表于2017-02-16 22:28 被阅读31次

    GCD (Grand Central Dispatch),线程管理作为系统的一部分来实现,因此更有效率。

    Dispatch Quene实现了:

    • 用于管理追加的Block的C语言实现的FIFO队列。
    • Atomic函数中实现的用于排他控制的轻量级信号。
    • 用于管理线程的C语言实现的一些容器。

    其中

    • 组件libdispatch提供Dispatch Quene技术。
    • 组件Libc(pthreads)提供pthread_workquene技术。
    • 组件XNU内核提供workquene技术。

    编程人员所使用的GCDAPI全部为包含在libdispatch库中的C语言函数。Dispatch Quene通过结构体和链表,被实现为FIFO队列。Block并不是直接加入FIFO队列,而是先加入Dispatch Continuation这一dispatch_continuation_t类型结构体中,然后再加入FIFO队列。该Dispatch Continuation用于记忆Block所属的Dispatch Group和其他一些信息,相当于一般常说的执行上下文。

    Global Dispatch Quene有如下8种:

     Global Dispatch Quene(High Priority)
     Global Dispatch Quene(Default Priority)
     Global Dispatch Quene(Low Priority)
     Global Dispatch Quene(Background Priority)
     Global Dispatch Quene(High Overcommit Priority)
     Global Dispatch Quene(Default Overcommit Priority)
     Global Dispatch Quene(Low Overcommit Priority)
     Global Dispatch Quene(Background Overcommit Priority)
    

    优先级中附有OvercommitGlobal Dispatch Quene使用在Serial Dispatch Quene中,不管系统状态如何,都会强制生成线程的Dispatch Quene。这8种Global Dispatch Quene各使用一个pthread_workqueneGCD初始化时,使用pthread_workquene_creat_np函数生成pthread_workquenepthread_workquene包含在Libc提供的pthreads API 中。其使用bsdthread_registerworkq_open系统调用,在初始化XNU内核的workquene之后获取workquene信息。

    XNU内核持有4种workquene:

    WORKQUENE_HIGH_PRIOQUENE
    WORKQUENE_Default_PRIOQUENE
    WORKQUENE_Low_PRIOQUENE
    WORKQUENE_BG_PRIOQUENE
    

    优先级与Global Dispatch Quene的四种执行优先级相同。

    相关文章

      网友评论

          本文标题:GCD 简述

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