美文网首页
Martin总结:RunLoop

Martin总结:RunLoop

作者: Z_Han | 来源:发表于2016-08-06 21:24 被阅读79次

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

    实际运用

    拓展阅读

    相关文章

      网友评论

          本文标题:Martin总结:RunLoop

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