Skip to content

Latest commit

 

History

History
17 lines (12 loc) · 1.33 KB

runloop.md

File metadata and controls

17 lines (12 loc) · 1.33 KB

Runloop

1. 线程和Runloop的关系

点击查看详细内容
  • runloop和线程是一一对应的,一个runloop对应一个核心线程,为什么或是核心的,因为runloop是可以嵌套的,但是核心只能有一个,他们的关系保存在一个全局的字典里。

  • runloop是来管理线程的,当线程的runloop被开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务。

  • runloop在第一次被创建,在线程结束时销毁。

  • 对于主线程来说,runloop在程序启动就创建好了。

  • 对于子线程来说,runloop是懒加载的,只有当我们使用时才会被创建,所以子线程用定时器要注意,确保线程的runloop被创建,不然定时器不会回调。

  • Source0事件:非基于Port的处理事件,不能主动唤醒休眠中的RunLoop,需要手动触发。我们触摸屏幕时,先摸到硬件(屏幕),屏幕表面的事件会先包装成EventEvent先告诉source1``(mach_port)source1唤醒RunLoop, 然后将事件Event分发给source0,然后由source0来处理。

  • Source1事件:基于mach_Port的,来自系统内核或者其他进程或线程的事件,可以主动唤醒休眠中的RunLoop