GCD实现原理

4.runloop内部实现逻辑?

3.runtime如何通过selector找到对应的IMP地址

在寻找IMP的地址时,runtime提供了两种方法

IMP class_getMethodImplementation(Classcls, SEL name);IMP method_getImplementation(Methodm)

GCD实现原理:

GCD有一个底层线程池,这个池中存放的是一个个的线程。之所以称为“池”,很容易理解出这个“池”中的线程是可以重用的,当一段时间后这个线程没有被调用胡话,这个线程就会被销毁。注意:开多少条线程是由底层线程池决定的(线程建议控制再3~5条),池是系统自动来维护,不需要我们程序员来维护(看到这句话是不是很开心?)

而我们程序员需要关心的是什么呢?我们只关心的是向队列中添加任务,队列调度即可。

    • 如果队列中存放的是同步任务,则任务出队后,底层线程池中会提供一条线程供这个任务执行,任务执行完毕后这条线程再回到线程池。这样队列中的任务反复调度,因为是同步的,所以当我们用currentThread打印的时候,就是同一条线程。

    • 如果队列中存放的是异步的任务,(注意异步可以开线程),当任务出队后,底层线程池会提供一个线程供任务执行,因为是异步执行,队列中的任务不需等待当前任务执行完毕就可以调度下一个任务,这时底层线程池中会再次提供一个线程供第二个任务执行,执行完毕后再回到底层线程池中。

    • 这样就对线程完成一个复用,而不需要每一个任务执行都开启新的线程,也就从而节约的系统的开销,提高了效率。在iOS7.0的时候,使用GCD系统通常只能开5~8条线程,iOS8.0以后,系统可以开启很多条线程,但是实在开发应用中,建议开启线程条数:3~5条最为合理。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,821评论 1 17
  • 1.介绍下内存的几大区域? 2.你是如何组件化解耦的? 3.runtime如何通过selector找到对应的IMP...
    小孩仔阅读 1,704评论 0 21
  • 小裴:(10-15) 宝剑三 这个阶段里,你被一股力量压制着自己的思想还有意念,你的心濒临破碎,愁云惨淡的一如暴雨...
    bluespirit_0阅读 503评论 0 0
  • 不讨厌的喜欢 世上的感情,分为王家卫和其它。 王家卫的故事里,人物的形象未必鲜明,有的风情万种,有的愚昧迟钝,有的...
    南逢酒馆阅读 626评论 0 1
  • 今天好高兴啊,去白云观学完了八段锦,结束时万般不舍,没有听够,但听李道长说有书可去,他写的,免费发放,随意结缘。 ...
    天外来客人阅读 407评论 1 0