当前位置:首页>iOSAPP>为什么 iOS 的 RunLoop 比 Android 的 Handler 省电 30%?

为什么 iOS 的 RunLoop 比 Android 的 Handler 省电 30%?

  • 2026-06-20 05:51:11
为什么 iOS 的 RunLoop 比 Android 的 Handler 省电 30%?

为什么 iOS 的 RunLoop 比 Android 的 Handler 省电 30%?

上一篇文章我们深度拆解了 Android 换掉 18 年消息队列的来龙去脉。发出后评论区炸了——"那 iOS 是怎么做的?""鸿蒙 Next 呢?""到底谁更强?"今天一次性回答。


一、两个快递员的故事

要理解三大系统的消息机制,我们先忘掉代码,想象两个快递员。

**快递员 A(Android 的 Handler)**坐在快递站的椅子上。没包裹的时候,他并没有真睡着——他每隔几秒就抬头看一眼门口,看看有没有人送包裹进来。没人来?继续埋头。有人来?跳起来接包裹。

**快递员 B(iOS 的 RunLoop)**也坐在快递站。但他装了门铃。没包裹的时候,他真的睡着了,呼吸都慢了。只有当快递员推门进来的那一刻,门铃响了,他才瞬间醒来接活。

你猜哪个快递员第二天精神更好?

这就是 Android Handler 和 iOS RunLoop 的本质区别。两者都在等消息,但等待的方式不一样。而等待方式的不同,直接决定了功耗的差异。


二、Android 的 Handler/Looper:门铃响了,但门铃连着长长的管道

先拆解Android。Android 的 Handler 机制在业界已经成了一个教科书级的设计模式。核心三件套:

  • Handler:负责投递消息的"快递员"
  • MessageQueue:消息排队的"快递货架"
  • Looper:不断从货架取消息的"快递站站长"

上篇文章讲过,Android 17 把这套 18 年的机制换了,但当时没展开讲为什么它在功耗上吃亏。现在补上。

阻塞是怎么实现的?

关键代码在 MessageQueue.next() 里。

当队列里没有消息时,它不会让 CPU 空转(那不是耍流氓嘛),而是调用 nativePollOnce(),这个 native 方法最终落到了 Linux 的 epoll_wait() 系统调用。

整个过程是这样的:

消息队列为空 → nativePollOnce() → epoll_wait() → 线程休眠                                             ↓                                    CPU 不给你时间片了

当新消息被 Handler 塞进队列时,nativeWake() 向一个管道(pipe)里写入一个字节:

Handler.sendMessage() → 消息入队 → nativeWake()                                        ↓                                   向 pipe 写入 1 字节                                        ↓                           epoll 检测到 pipe 可读                                        ↓                           epoll_wait() 返回 → 线程被唤醒

所以 Android 本质上是通过 Linux 内核的 pipe + epoll 机制实现休眠和唤醒的。

问题出在哪?

问题就在这个 pipe 上。

Pipe 是 Linux 内核的产物,工作在宏内核(Monolithic Kernel)中。当 epoll 监听 pipe 上的事件时,虽然线程进入休眠,但内核必须维护这个 pipe 的状态——创建 inode、分配内核缓冲区(默认 64KB)、维护文件描述符表。

换句话说:

  • 用户态线程是睡了,但内核态还在默默记账
  • 每次消息唤醒,pipe 的写端触发一次内核上下文切换
  • handler、pipe、epoll 这三个内核对象之间的协调,需要多次系统调用

更底层的细节:Android 的 Looper 主线程并不是彻底休眠。VSync 信号(垂直同步,用于屏幕渲染)每隔约 16.6ms(60Hz 屏幕)就会唤醒它一次。即使你的 App 什么都没干,主线程也会被周期性地拽起来检查渲染任务。这是硬件的锅——屏幕要刷新,线程就必须醒。 虽然休眠已经很高效了,但"醒"这件事本身就是功耗代价。

这解释了为什么同样的硬件跑同样功能的 App,Android 普遍更耗电——不是 Looper 写得不好,而是它依赖的 Linux epoll + pipe 这套东西,天生就比 iOS 的方案多了一层内核开销。


三、iOS 的 RunLoop:Mach Port 的极致优雅

现在看 iOS。

RunLoop 的理念和 Android 的 Looper 几乎是一个模子刻出来的——它们都是解决"一个线程怎么又等事件又不退出"的问题。但实现手法完全不同

iOS 的 RunLoop 不是靠 pipe + epoll,而是靠 Mach Port

Mach Port 是什么?

Mach 是一个微内核,最初诞生于 1980 年代的卡内基梅隆大学。Apple 用它做了 macOS 和 iOS 的底层内核(XNU = Mach + BSD 层)。

Mach 的核心通信原语就是 Port(端口)。你可以把 Port 理解成内核中注册的一个消息接收点。线程可以向某个 Port 发送消息,也可以等待某个 Port 上有消息到来。

关键区别来了:

在 Android 中,epoll 监听的是一个文件(pipe 的文件描述符)。文件描述符的创建、读写、销毁都需要经过 Linux VFS(虚拟文件系统)层,调用链长,开销大。

在 iOS 中,RunLoop 直接调用 Mach 的 mach_msg() 系统调用,直接在内核的消息层等待 Port 上的消息

RunLoop 等待消息 → CFRunLoopRun() → mach_msg() → 直接在 Mach 内核中休眠

没有 pipe。没有 epoll。没有文件描述符。没有任何中间层。

为什么更省电?

三个层面的原因:

第一,更干净的休眠mach_msg() 是一个原子化的系统调用——它同时完成了"等待 Port 消息"和"接收消息"两件事。而 Android 需要先 epoll_wait() 被唤醒,再从用户态去 read() pipe 里的那个字节,再返回到 Java 层取出 Message,路径更长。每多一次系统调用,就多一次用户态/内核态的切换功耗。

第二,Mach 微内核的调度粒度。Linux 宏内核的调度按时间片分配 CPU。Mach 微内核可以按消息来调度——收到一条消息,处理完,立刻回到休眠状态。调度的粒度更细,唤醒和休眠之间的切换更快。

第三,iOS 对 VSync 的整合。Android 的 VSync 信号通过独立的 Choreographer 机制注入 Looper 队列,与 epoll 唤醒走的是同一条 pipe 路径。而 iOS 的 Core Animation 通过 CFRunLoop 的 Observer(观察者)模式直接把渲染任务塞进 RunLoop 的一个特定阶段,不需要额外唤醒。相当于 iOS 的 RunLoop 在等消息的时候,顺便把"到点该画 UI 了"这个提醒嵌入了消息等待的同一段代码里,而不是独立触发。

"省电 30%"这个数字到底准不准确?

这是一个合理的工程估算,不是营销话术。

iOS 和 Android 的功耗差异受很多因素影响(屏幕、射频、App 质量等),不能全部归因于消息机制。但在纯线程调度层面,iOS 的 Mach Port 方案确实比 Android 的 pipe/epoll 方案减少了约 20-40% 的内核上下文切换开销。这个数据来自学术界对微内核 IPC 性能的多次实测(包括 L4、seL4、Mach 的研究论文)。

"30%"是一个合理的中间值,是为了帮你快速建立直觉——不是说用 iPhone 就一定比安卓省 30% 的电,而是在消息调度这件事上,iOS 的架构确实比 Android 高效大约三成


四、鸿蒙 Next 的 EventRunner:后发者的降维打击

如果 Android 是旧时代的基建,iOS 是精雕细琢的改良版,那鸿蒙的 EventRunner + EventHandler 就是全新的框架。

鸿蒙做了什么不一样的事?

鸿蒙的 EventRunner 在思想上是 Android 的 Looper + Handler 的"高阶进化版",但它的底层区别在于鸿蒙是纯微内核

对比一下三家内核体量的差距:

  • Linux 内核(Android 依赖):千万行代码、内核镜像超过 50MB。驱动、文件系统、网络栈全编译进内核。
  • XNU(iOS 依赖):Mach 微内核 + BSD 层。隔离性比 Linux 好,但 BSD 层跑在内核空间,28% 的内核漏洞来自 BSD 和 Mach 的边界交互。
  • 鸿蒙微内核:代码量不到 10 万行。驱动、文件系统、网络栈全部移到用户态。内核只保留进程调度、内存管理、IPC 三项核心功能。

这意味着什么?

在 Android 上,一个驱动挂了,整个系统崩溃(42% 的系统崩溃源于驱动层漏洞,这是 2022 年某主流手机厂商的统计)。在鸿蒙上,驱动和文件系统跑在用户态,挂了就被看门狗自动重启,系统可用性提升 3 到 5 倍。

EventRunner 的分布式基因

鸿蒙在设计之初就考虑了一个场景:你有一部手机、一块手表、一台平板、甚至一辆车,它们之间的消息怎么传递?

Android 的做法是通过 Wi-Fi Direct + 蓝牙混合传输,跨设备文件传输平均时延 超过 200ms。iOS 的 AirDrop 体验好很多,但要求同一 iCloud 账号。

鸿蒙用软总线(Distributed SoftBus):设备一上线自动注册服务,不需要手动配对,跨设备消息时延低于 20ms。而 IPC(进程间通信)的时延更是控制在了 20 微秒以内。

换个角度理解:

  • Android 跨设备传消息:你在客厅喊人 → 对方在卧室回一声 → 你起身走过去 → 确认对方听到了。这个过程需要 200 毫秒。
  • 鸿蒙跨设备传消息:你按了个门铃 → 整栋楼的人同时收到信号。20 毫秒。

EventRunner 的代码怎么写?

// 创建一个独立的后台 Runnerlet runner = EventRunner.create("backgroundTask");// 绑定 Handler 到这个 Runnerlet handler = newEventHandler(runner);// 三种投递方式handler.sendEvent(event);                        // 立即handler.sendEvent(event, 5000);                   // 延迟 5 秒handler.sendTimingEvent(event, targetTime);       // 精确时刻

相比于 Android 需要先 Looper.prepare() 再 new Handler(),再手动 Looper.loop() 的三步流程,鸿蒙的封装更干净。而且 sendTimingEvent() 原生支持绝对时间点的精确定时——在 Android 上你需要 postDelayed() 配合 SystemClock.uptimeMillis() 自己算。


五、三方对比:没有绝对的王者

聊完了各自的实现,我们来做个横评。

功耗效率

iOS 的 RunLoop 最省电。Mach Port 的原子化系统调用减少了用户态/内核态切换次数,休眠和唤醒之间的切换几乎是瞬时完成。RunLoop 把 VSync 整合进同一个等待流程,避免了额外的唤醒开销。

鸿蒙 EventRunner 次之。微内核的消息调度天生高效,IPC 时延 20 微秒是业界顶级水平。但由于鸿蒙多了一层分布式软总线的通信开销(真跨设备协同时),在某些场景下功耗会略高于 iOS 的纯本地 RunLoop。

Android 的 Handler/Looper 功耗最高。Linux 宏内核 + pipe + epoll 的组合虽然已经很精妙(2008 年设计时绝对领先时代),但相比之下多了一道内核态的文件系统开销,加上 VSync 的独立唤醒路径,导致无效的上下文切换更多。

开发体验

Android 的 Handler/Looper 的学习曲线最陡。你需要理解 Handler、Looper、MessageQueue 三个类的协作关系,还要注意线程安全问题——在非主线程使用 Handler 需要手动调用 Looper.prepare(),忘了就可能丢消息或崩溃。

iOS 的 RunLoop 的学习曲线中等偏上。Apple 把大部分细节封装好了,主线程的 RunLoop 自动运行,你不用手动创建。但如果你想深入定制——比如添加 RunLoop Observer 监听特定事件阶段——API 的文档极为匮乏,很多时候靠试错和逆向。

鸿蒙的 EventRunner 是最简洁的。创建 Runner、绑定 Handler、发消息——三步搞定。封装层次高,不容易写出线程安全 bug。缺点是生态太新,遇到坑时社区资源少,查资料基本只能看华为官方文档。

分布式能力

这一点上鸿蒙是断层式领先,因为 Android 和 iOS 的消息机制在设计之初根本没考虑"一个手机的手表要响应平板上点击的按钮"这种场景。

  • Android:单设备设计。跨设备通信需要上层应用自己搭桥(比如通过蓝牙、Wi-Fi Direct),与底层的 Handler/Looper 毫无关系。
  • iOS:通过 Continuity(连续互通)和 Handoff 实现了一定的跨设备体验,但仅限于"延续任务"而非"分布式并行处理"。底层 RunLoop 不参与跨设备调度。
  • 鸿蒙:EventRunner 原生支持分布式调度。你可以创建一个 Runner 跑在平板上,手机主线程通过 EventHandler 直接向它发消息。相当于一台设备的线程池可以扩展到多台设备上。

安全隔离

  • Android:驱动在内核空间。驱动挂了 → 系统崩溃。
  • iOS:BSD 层在内核空间。BSD 和 Mach 的边界交互是安全漏洞的重灾区(28% 的内核漏洞出在这里)。
  • 鸿蒙:驱动和所有系统服务都在用户态。挂了就被看门狗重启,不影响内核。安全认证 CC EAL5+。

六、结语:18 年、40 年和 5 年

Android 的 Handler/Looper 背负了 18 年的历史包袱,它的 epoll + pipe 方案在 2008 年是工程奇迹;但站在 2026 年看,宏内核的臃肿让它在功耗和可扩展性上都吃了亏。

iOS 的 RunLoop 依赖的 Mach 微内核技术可以追溯到 1980 年代,将近 40 年前的设计到今天仍然在功耗上碾压 Android。这恰恰说明一个好的抽象,时间会站在你这边

鸿蒙的 EventRunner 刚刚崭露头角,5 年的时间走完了别人几十年的路。它在分布式调度上的创新是 Android 和 iOS 短期内难以追赶的。但生态的成熟度是其最致命的短板——查个 bug 可能要翻遍了全网也找不到答案。

三套机制,造就了三套哲学:

  • Android:先让应用跑起来,下个版本再优化。务实,但技术债越滚越大。
  • iOS:先想清楚,再写代码。克制,但正确。
  • 鸿蒙:重塑规则,后发制人。激进,但未来可期。

你是开发者吗?你更看好哪一家的方案?评论区聊聊。我也想知道你实际开发中踩过哪些消息机制的坑,不管是 Handler 的线程安全噩梦,还是 RunLoop 的诡异休眠,都欢迎分享。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-08 08:20:02 HTTP/2.0 GET : https://c.mffb.com.cn/a/495260.html
  2. 运行时间 : 0.130935s [ 吞吐率:7.64req/s ] 内存消耗:4,407.55kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=57cfab3e088e3eb131592852d89d1c41
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000526s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000773s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000327s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000301s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000567s ]
  6. SELECT * FROM `set` [ RunTime:0.000243s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000606s ]
  8. SELECT * FROM `article` WHERE `id` = 495260 LIMIT 1 [ RunTime:0.003738s ]
  9. UPDATE `article` SET `lasttime` = 1783470002 WHERE `id` = 495260 [ RunTime:0.004004s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000326s ]
  11. SELECT * FROM `article` WHERE `id` < 495260 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000553s ]
  12. SELECT * FROM `article` WHERE `id` > 495260 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000404s ]
  13. SELECT * FROM `article` WHERE `id` < 495260 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006859s ]
  14. SELECT * FROM `article` WHERE `id` < 495260 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.017581s ]
  15. SELECT * FROM `article` WHERE `id` < 495260 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.024026s ]
0.132487s