• runloop


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

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

    1. 什么是事件循环呢?
    2. 事件循环(状态切换)
    3. 没有消息需要处理时,休眠以避免资源占用
    4.             用户态——>内核态
    5. 有消息需要处理时,立刻被唤醒
    6.             用户态<—— 内核态
    • 什么是事件/消息进行管理呢?

    • 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() 这个地方。

  • 相关阅读:
    优先队列排序(JAVA)
    DDoS和CC攻击的原理
    实验2 Python数字类型实验
    【数据结构】搜索二叉树(C++实现)
    Vue.js 构建可复用的组件
    LLVM学习笔记(59)
    “百度杯”CTF比赛 九月场,Web:SQL
    2022-01-29-Ajax
    按关键字搜索商品详情销量的步骤教学
    Flask框架学习:蓝图的使用
  • 原文地址:https://blog.csdn.net/qq_41431406/article/details/127398387