美文网首页iOS开发iOS DeveloperiOS学习笔记
《性能可视化之路》RunLoop原理笔记

《性能可视化之路》RunLoop原理笔记

作者: DevinWu | 来源:发表于2017-04-12 09:51 被阅读115次

RunLoop是一让线程能随时处理事件但不退出的机制。RunLoop 实际上是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行Event Loop 的逻辑。线程执行了这个函数后,就会一直处于这个函数内部 “接受消息->等待->处理” 的循环中,直到这个循环结束(比如传入 quit 的消息),函数返回。让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。


Runloop原理.png
do{
 //通知将要处理timer和source
 __CFRunLoopDoObservers(kCFRunLoopBeforeTimers);
 __CFRunLoopDoObservers(kCFRunLoopBeforeSources);

__CFRunLoopDoBlocks();//处理非延迟的注线程调用
__CFRunLoopDoSource0();//处理UIEVent事件

//GCD dispatch main queue
CheckIfExistMessagesInMainDispatchQueue();

//即将进入休眠
__CFRunLoopDoObservers(kCFRunLoopBeforeWaiting);

//等待内核mach_msg事件
mach_port_t wakeupPort = SleepAndWaitForWakingUpPorts();

//Zzzz.....

//从等待中醒来
__CFRunLoopDoObservers(kCFRunLoopAfterWaiting);

//处理因timer的唤醒
if(wakeUpPort == timerPort)
         __CFRunLoopDoTimers();
//处理异步方法唤醒,如dispatch_asyn
else if(wakeUpPort == mainDispatchQueuePort)
       __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__()

//UI刷新,动画显示
else
     __CFRunLoopDoSource1();
 
//再次确保是否有同步的方法需要调用
  __CFRunLoopDoBlocks();

}while(!stop && timeout);

相关文章

  • 《性能可视化之路》RunLoop原理笔记

    RunLoop是一让线程能随时处理事件但不退出的机制。RunLoop 实际上是一个对象,这个对象管理了其需要处理的...

  • iOS大厂面试点(绝对高频)

    技术类: 1. 性能优化 2. 底层原理 Runtime - Runloop 线程 自动释放池什么时候释放 A...

  • runloop

    runloop是什么 runloop与线程有什么关系 runloop的原理 runloop的使用

  • 三、页面性能优化

    《指尖上行——移动前端开发进阶之路》学习笔记 第三章:介绍页面性能的优化原理,如如何进行资源优化、加载优化及脚本优...

  • runloop的原理笔记

    一般来说,一个线程一次只能执行一个任务,执行完成后线程就会推出。如果我们需要一个机制,让线程随时处理事件但并不退出...

  • RunLoop简介

    RunLoop简介 RunLoop底层实现原理 RunLoop接收输入事件的2种来源 RunLoop对象 开源的C...

  • iOS RunLoop应用分析—原来这些都在使用RunLoop

    之前已经介绍过RunLoop原理,感兴趣的同学可以阅读iOS——解密RunLoop原理[https://xiaoz...

  • RunLoop研究

    目录: App启动原理 RunLoop 的概念 RunLoop 与线程的关系 RunLoop 对外的接口 RunL...

  • RunLoop 原理和核心机制

    前一短时间负责项目的性能优化,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研究了RunLoop的原...

  • Runloop

    Runloop 实现原理及应用iOS - RunLoop 底层源码详解及具体运用

网友评论

    本文标题:《性能可视化之路》RunLoop原理笔记

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