iOS GCD实现

GCD的Disaptch Queue是如何实现的呢

1.用于管理追加Block的的c语言层实现的FIFO队列

2.Atomic函数中实现用于拍他控制轻量级的信号

3.用于管理线程的c语言层实现的一些容器

GCD实现需要使用以上这些工具。但是如果仅仅这些内容可以实现,那内核要用来干嘛的了。

苹果官方说明:

通常,应用程序中编写的线程管理用的代码要在系统及实现。这句话表达的意思是iOS的核心XNU内核级上实现。因此不论程序猿如何去管理自己的代码,在性能方面不可能胜过基于XNU内核实现的GCD

用于实现Disaptch Queue而使用的软件组件

  组件名称      提供技术

 libdispatch    Disaptch Queue

 Libc(pthreads)     pthreads_workqueue 

  XNU内核     workqueue  

Block并不是直接加入FIFO队列,而是先加入Dispatch Continution,这一dispatch_continution_t类型的结构体中,然后加入FIFO队列,该Dispatch Continution用于记录block所属的Dispatch Continution,和其它的一些信息,相当于一般常说的执行上下文


Global Dispatch Queue优先级有如下8中;

Global Dispatch Queue (High Priority)

Global Dispatch Queue (Default Prority)

Global Dispatch Queue (Low Priority)

Global Dispatch Queue (Background Priorty)

Global Dispatch Queue (High Overcommit Priority)

Global Dispatch Queue (Default Overcommit Prority)

Global Dispatch Queue (Low Overcommit Priority)

Global Dispatch Queue (Background Overcommit Priorty)

优先级有Overcommit的Global Dispatch Queue使用serial Dispatch Queue中,如Overcommit这个名称,不管系统状态如何都会强制生成线程的Dispatch Queue。

这个8中Global Dispatch Queue各使用一个pthread_workqueue

Pthread_workqueue包含在libc提供的pthreads API中,其使用的bsdthreads_register和workq_open系统调用,在初始化workqueue之后获取workqueue信息。

XNU内核持有4种workqueue。

WORKQUEUE_HIGH_PRIOQUEUE

WORKQUEUE_LOW_PRIOQUEUE

WORKQUEUE_BG_PRIOQUEUE

WORKQUEUE_DEFAULT_PRIOQUEUE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值