Martin总结:RunLoop

2016-08-06  本文已影响79人  Z_Han

标题由Martin开头的文章,均由Martin_Joy总结,再次感谢Martin童鞋!

前言

因为最近一直在准备校招,阅读了很多相关的书籍及blog,因为自己没有形成清晰的知识结构,导致越看越乱。无意中和朋友Martin_Joy聊起此事,发现他梳理的知识结构非常清晰,征得Martin的同意后,决定发上来,方便学习之用。由此可见,Martin童鞋是个非常乐于分享的人。在此,表示对他深深的感谢,也希望Martin在iOS开发的道路上越走越远。

runloop基本概念

runloop可以看成和线程是一对一的关系,但是runloop可以进行嵌套。runloop主要用来处理各种事件,能够节省CPU资源,在需要处理的时候唤醒,空闲的时候休眠。

猜想内部实现

   function loop() {
       initialize();
       do {
           var message = get_next_message();
           process_message(message);
       } while (message != quit);
   }

唤醒和休眠

线程休眠前,指定用于唤醒我的mach_port,然后去休眠后,系统内核会将线程挂起,处于mach_msg_trap()状态,当其他线程(比如有一个进程在后面控制用户输入,一直在跑)向内核发送mach_msg的时候,内核去mach_port唤醒休眠的线程,休眠线程的trap状态被唤醒,runloop继续干活

实际运用

拓展阅读

上一篇 下一篇

猜你喜欢

热点阅读