Martin总结:RunLoop

标题由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继续干活

实际运用

拓展阅读

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

推荐阅读更多精彩内容