runloop

Runloop是通过内部维护的事件循环来对事件/消息进行管理的一个对象

这里有两个重点: 事件循环    事件/消息进行管理

什么是事件循环呢?
事件循环(状态切换)
 没有消息需要处理时,休眠以避免资源占用
            用户态——>内核态

有消息需要处理时,立刻被唤醒
            用户态<—— 内核态
  • 什么是事件/消息进行管理呢?

  • RunLoop 通过 mach_msg()函数接收、发送消息来进行管理。它的本质是调用函数 mach_msg_trap(),相当于是一个系统调用,会触发内核状态切换。

  • 可以做到在有事做的时候做事,没事做的时候,会由用户态切换到内核态,避免资源浪费。

  • 如何实现事件、消息的管理

  • mach_msg() 函数实际上是调用了一个 Mach 陷阱 (trap),

  • 即函数mach_msg_trap(),陷阱这个概念在 Mach 中等同于系统调用。

  • 当你在用户态调用 mach_msg_trap() 时会触发陷阱机制,切换到内核态;
    内核态中内核实现的 mach_msg() 函数会完成实际的工作,

所以说 Runloop的核心就是一个 mach_msg(),RunLoop 调用这个函数去接收消息,如果没有别人发送 port 消息过来,内核会将线程置于等待状态。例如你在模拟器里跑起一个 iOS 的 App,然后在 App 静止时点击暂停,你会看到主线程调用栈是停留在 mach_msg_trap() 这个地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值