美文网首页
浅谈GCD的内部实现

浅谈GCD的内部实现

作者: zweic | 来源:发表于2018-03-19 10:22 被阅读26次

CGD

GCD是苹果开发的多线程编程的解决方案,通过简单的API就可以实现创建新线程去执行我们需要执行的任务,不需要我们手动地创建和管理线程。它的API包含在libdispatch库中。

Dispatch Queue

Dispatch Queue是GCD中很重要的一部分,它是负责执行处理的队列,它的内部主要由三部分构成:

1、一个管理追加block的C语言实现的FIFO的队列;

2、处理信号量的原子操作;

3、用于管理线程的C语言实现的一些容器。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSLog(@"我的操作");

});

dispatch queue 通过 dispatch_async等函数将block追加到队列上,block不是直接追加到队列,而是先构成一个dispatch continuation构造体,构造体包含了这个block还有一些上下文信息,例如block所属的dispatch group等等。

Dispatch Queue执行过程是怎么的呢?

workqueue

工作队列,是一个用于创建内核线程的接口,通过它创建的内核线程来执行内核其他模块排列到队列里的工作。不同优先级的dispatch queue对应着对应优先级的workqueue。GCD初始化的时候,使用pthread_workqueue_create_np创建pthread_workqueue

执行过程

dispatch queue执行block时,先从dispatch queue自身的FIFO队列中取出dispatch continuation,接着调用pthread_workqueue_additem_np函数,传入这些参数:dispatch queue自身、一个符合其优先级workqueue,dispatch continuation。

调用该函数后,会通知对应的workqueue增加执行项目,XNU内核生成线程,线程执行pthread_workqueue函数执行block

链接:https://www.jianshu.com/p/01c3b59314d8

相关文章

  • 浅谈GCD的内部实现

    CGD GCD是苹果开发的多线程编程的解决方案,通过简单的API就可以实现创建新线程去执行我们需要执行的任务,不需...

  • 浅谈GCD的内部实现

    CGD GCD是苹果开发的多线程编程的解决方案,通过简单的API就可以实现创建新线程去执行我们需要执行的任务,不需...

  • iOS面试题-第八页

    71.GCD内部怎么实现的? ①.iOS和 OSX 的核心是 XNU 内核, GCD是基于 XNU 内核实现的(是...

  • NSOperation GCD 如何选择

    GCD内部实现 1.iOS和OS X的核心是XNU内核,GCD是基于XNU内核实现的2.GCD的API全部在lib...

  • GCD

    相关链接GCD使用经验与技巧浅谈

  • swift3.0+实现持续震动和取消震动

    只是简单的实现功能,使用GCD延迟循环调用,主要是swift对gcd写法的改变,可以写个单例,全局调用,方法内部可...

  • 浅谈GCD

    浅谈GCD1.什么是GCDGCDGrand Central Dispatch (GCD)是Apple开发的一个多核...

  • 浅谈GCD

    GCD实现原理: GCD有一个底层线程池,这个池中存放的是一个个的线程。之所以称为“池”,很容易理解出这个“池”中...

  • 浅谈GCD

    出来工作已经一段时间了,但是对于大四才转程序的我,对很多程序方面的问题还是似懂非懂。很多时候学习起来也很迷茫,不知...

  • 浅谈GCD

    1,任务和队列 任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码。在 GCD 中是放在 block ...

网友评论

      本文标题:浅谈GCD的内部实现

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