runloop启动后,会首先发送一个通知告诉观察者即将进入runloop;
之后runloop会向观察者发送一个即将处理Timer和source0事件的通知;
然后runloop会正式处理source0事件;
然后如果有source1事件需要处理,则会通过goto跳转代码逻辑到处理source1事件;
如果没有source1事件处理,则线程此时将要休眠,并发送通知,然后进行用户态到内核态的切换,然后线程休眠等待唤醒;
唤醒线程的条件有:
- source1
- timer事件的回调
- 外部手动唤醒