当前位置:首页>Linux>为什么你写的网络程序老是卡死?看完Linux的5种IO模型,彻底告别阻塞噩梦

为什么你写的网络程序老是卡死?看完Linux的5种IO模型,彻底告别阻塞噩梦

  • 2026-02-15 12:09:44
为什么你写的网络程序老是卡死?看完Linux的5种IO模型,彻底告别阻塞噩梦

一次线上事故引发的血案

上周五晚上,我正在和朋友吃烧烤,突然手机疯狂震动——线上报警群炸了。用户反馈App加载转圈超过10秒,紧接着大量502错误。我赶紧打开电脑,登录服务器,top一看,CPU利用率不高,但所有Tomcat线程都卡在recvfrom系统调用上,一动不动。

那一刻我意识到:我们又一次被Linux的阻塞IO坑了。明明代码里用了“非阻塞模式”,为什么请求还是排队堵死了?这个问题困扰了我很久,直到我把Linux的五种IO模型彻底啃透。

如果你也遇到过:

  • • 面试被问“epoll为什么高效”时大脑一片空白
  • • 用Netty写了个服务,却说不清它底层到底用了什么IO模型
  • • 线上服务偶尔卡顿,重启又好了,但始终找不到根因

那么今天这篇文章,就是为你准备的。我会用最通俗的类比、最精简的代码、最真实的生产案例,帮你一次搞定Linux阻塞/非阻塞/异步IO的核心原理。读完它,下次面试官再问IO模型,你不仅能侃侃而谈,还能顺手画出一张清晰的流程图。


一、先来一个神比喻:等快递的5种姿势

想象一下,你网购了一个包裹,快递员正在派送,但你不知道他具体几点到。你拿到包裹才算完成一次完整的“IO操作”——包裹是数据,快递员敲门是内核通知。

  • • 阻塞IO:你什么也不干,死守在门口等着,快递员不来你就不动。虽然能第一时间拿到包裹,但这期间你啥也干不了。
  • • 非阻塞IO:你每隔两分钟去门口看一眼,没来就回屋做其他事,过会儿再来。包裹可能会晚点拿到,但你不会干等。
  • • IO多路复用:你雇了一个物业保安(select/epoll),告诉他帮我盯着所有快递,来了通知我。你安心在家做自己的事,保安一喊你才去门口。
  • • 信号驱动IO:你在门口装了个门铃(信号),快递员按铃你再去。比保安更轻量,但门铃可能会按爆。
  • • 异步IO:你让快递员直接把包裹放门口鞋柜里,然后发短信告诉你“搞定啦”。你连开门这个动作都不用做。

这五种姿势,就是Linux下阻塞、非阻塞、多路复用、信号驱动、异步IO的生活化版本。记住这个类比,后面讲到代码时你会不断回忆起它。


二、阻塞IO:最老实也最坑的“看门狗”

原理速写

阻塞IO是最传统的模型。当进程调用recvfrom读取网络数据时,内核会检查数据是否准备好。如果数据没准备好,进程会被挂起,CPU切换给其他进程,直到数据拷贝到用户空间,recvfrom才返回。

// 阻塞IO示例:简单的TCP客户端
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, ...);
char buf[1024];
int n = recv(sockfd, buf, sizeof(buf), 0);  // 🟢 Highlight:如果没有数据,这行会一直卡死
printf("received %d bytes\n", n);

问题:一个线程只能处理一个连接。10000个并发就需要10000个线程,系统资源瞬间耗尽。

面试易错点

很多人以为“非阻塞IO”就是把socket设为O_NONBLOCK就完事了。错! 非阻塞IO只解决了“不挂起进程”的问题,但没有解决“如何高效知道数据已就绪”的问题——你依然需要轮询。


三、非阻塞IO:不等人,但你要频繁回头问

原理与代码

设置socket为非阻塞模式后,recvfrom会立即返回。如果数据没准备好,返回错误码EWOULDBLOCK。你需要循环调用,直到读到数据。

int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);  // 🟢 Highlight:开启非阻塞模式

while (1) {
int n = recv(sockfd, buf, sizeof(buf), 0);
if (n > 0) {
// 处理数据
break;
    } elseif (n == 0) {
// 连接关闭
break;
    } else {
if (errno == EWOULDBLOCK) {
// 数据还没来,先做别的事
            do_something_else();
continue;
        }
// 其他错误
    }
}

优点:线程不会被内核挂起,可以同时处理多个连接。
缺点:轮询是用户态发起的,每次系统调用都有成本;且轮询频率不好控制——太快浪费CPU,太慢增加延迟。

生活类比加强版

非阻塞IO就像你等包裹,每5分钟去门口看一眼,没来就回屋写代码。但你的时间被切成了碎片,而且如果包裹刚好在你刚看完的那10秒内到了,你就要多等5分钟才能拿到。


四、IO多路复用:真正的并发基石(附核心流程图)

这是本文最值得画图的部分。请你把下面这张流程图刻在脑子里,面试时直接手绘出来,绝对加分。

        +----------------+                +-----------------+
        |    进程/线程    |                |      内核       |
        +-------+--------+                +-------+---------+
                |                                 |
                | 1. select/poll/epoll_wait      |
                |-------------------------------->|
                |                                 | 2. 监听多个fd
                |                                 |   数据未就绪
                | 3. 阻塞(或指定超时返回)        |
                |<--------------------------------|
                |                                 |
                |                                 | 4. 某个fd数据到达
                |                                 |   网卡中断 -> 内核缓冲
                | 5. 系统调用返回                |
                |<--------------------------------|
                |     告知“哪些fd可读/可写”       |
                |                                 |
                | 6. recvfrom(数据已就绪,不阻塞)|
                |-------------------------------->|
                | 7. 拷贝数据到用户空间           |
                |<--------------------------------|
                | 8. 应用程序处理数据            |
                |                                 |

这张图最核心的逻辑是:IO多路复用将“等待多个IO事件”这件事从用户态转移到了内核态。内核帮我们盯着成百上千个连接,哪个有动静就告诉进程,进程再去调用recvfrom(此时数据一定就绪,不会阻塞)。

三剑客对比:select/poll/epoll

  • • select:古董级,监听数量受限(1024),每次都要全量传递fd集合,效率随fd数增加直线下降。
  • • poll:解决了1024限制,但仍是“水平触发”,每次都要全量遍历。
  • • epoll:Linux 2.6后的王者,仅此一家。使用事件驱动机制,只返回活跃的fd,无需全量遍历;支持边缘触发模式,效率极高。
// epoll核心代码片段(省略错误处理)
int epfd = epoll_create1(0);
structepoll_eventevevents[1024];
ev.events = EPOLLIN;
ev.data.fd = listen_sock;
epoll_ctl(epfd, EPOLL_CTL_ADD, listen_sock, &ev);

while (1) {
int nfds = epoll_wait(epfd, events, 1024-1);  // 🟢 Highlight:内核返回实际发生事件的fd数量
for (int i = 0; i < nfds; i++) {
if (events[i].data.fd == listen_sock) {
// 处理新连接
        } else {
// 读写数据,此时recv不会阻塞
        }
    }
}

点睛注释的那一行epoll_wait返回的是已就绪的事件数量,应用程序无需遍历所有fd,只处理这少数几个活跃的fd。这正是epoll支撑百万连接的秘密。


五、信号驱动IO与异步IO:理想很丰满,现实很骨感

信号驱动IO(SIGIO)

进程发起IO操作时,先给内核注册一个信号处理函数。当数据就绪时,内核发信号通知进程,进程在信号处理函数中调用recvfrom拷贝数据。这个模型实际上仍然是同步的,因为拷贝数据的过程还是进程亲自做的。

致命缺陷:信号队列溢出、不可靠,且Linux对TCP支持极差,几乎没人用。

异步IO(AIO)

这才是真正的“异步”——进程发起aio_read后,内核负责把数据从内核空间拷贝到用户空间,全部完成后通知进程。进程从头到尾不用参与任何等待和数据搬运。

但现实是:Linux原生的AIO(libaio)对磁盘文件支持尚可,对网络socket的支持一直不完善,性能甚至不如epoll。所以目前高并发网络编程的事实标准仍是epoll(IO多路复用),而真正的异步IO模型(如Windows的IOCP、Linux的io_uring)正在崛起。


六、我的踩坑故事:盲目“非阻塞”依然阻塞

两年前,我接手一个老项目,里面所有socket都设置了O_NONBLOCK,但每过几天就会出现服务无响应。我坚信非阻塞IO没问题,一度怀疑是内核bug。

后来用strace跟踪,发现大量线程卡在read调用上,返回-1且errnoEAGAIN。等等——非阻塞模式不应该卡死啊?仔细看代码:

// 伪代码:Java NIO模式设置
SocketChannelchannel= SocketChannel.open();
channel.configureBlocking(false);  // 非阻塞模式
// ... 注册到Selector
while (selector.select() > 0) {
// 某处不小心调用了channel.read(),但此时数据可能还没完全就绪
}

问题根源:开发者虽然配置了非阻塞模式,也用了Selector,但在事件循环中调用了channel.read()之后,没有处理返回值-1(EAGAIN)的场景。当数据包被拆成多个TCP段,第一个段到了,事件触发,但第二个段还没到,此时read会返回EAGAIN。代码里直接忽略了这种情况,下一次循环时因为该fd已经没有可读事件了,再也不会触发,于是缓冲区里的数据永远读不出来了

从那以后,我给自己定下规矩:使用epoll时,必须严格区分“水平触发”和“边缘触发”的处理模式,并对非阻塞read的EAGAIN做妥善处理。这个坑至今还在很多生产代码里潜伏着。


七、面试官追问:你能说清epoll的底层原理吗?

:epoll比select高效的根本原因是什么?
:三点。

  1. 1. 数据结构:select用位集合,每次调用都要从用户态拷贝整个集合到内核;epoll在内核维护一个红黑树存储所有注册的fd,通过epoll_ctl增删改,不需要每次重复传递。
  2. 2. 就绪通知:select/poll需要内核遍历所有fd检查状态;epoll通过回调机制,当fd就绪时内核将其加入就绪队列,epoll_wait直接返回就绪队列,复杂度O(1)
  3. 3. 边缘触发模式:这是epoll独有的高效模式。在边缘触发下,epoll_wait只在状态变化时通知一次,配合非阻塞IO循环读尽所有数据,减少系统调用次数。

:那Nginx为什么用epoll的边缘触发?
:Nginx追求极致性能。边缘触发可以减少epoll_wait返回的次数,迫使程序在单次通知中尽可能读写更多数据,充分利用每次系统调用。但代价是编码复杂,容易漏读。


八、五种模型实战选择指南(Autumn实战总结)

  • • 阻塞IO:仅适用于连接数极少、延迟极低的场景(如嵌入式设备简单协议),绝不适用于高并发服务端
  • • 非阻塞IO:必须配合轮询,很少单独使用,但它是NIO的基础。
  • • IO多路复用高并发网络编程的首选。如果使用Java,选择NIO(Selector)或Netty;如果使用C,选择libevent、libuv;如果使用Go,它的goroutine底层也是用epoll封装的网络轮询器。
  • • 信号驱动IO:基本被遗忘,不建议学习。
  • • 异步IO:关注io_uring,它是Linux未来的高性能异步接口,但生产环境普及尚需时间。

一句话总结面试聊原理,生产用epoll(或它的封装),未来看io_uring


九、互动话题 & 秋日福利

今日互动:你在实际项目中遇到过哪些因IO模型使用不当导致的线上故障?或者你曾因为不理解阻塞/非阻塞而被面试官问倒过?欢迎在评论区分享你的“血泪史”,我会选出三位送出下面的福利。

秋日福利
回复关键字 「IO模型实战」 即可获取我整理的:

  1. 1. 本文所有代码示例(C/Java双版本)
  2. 2. epoll边缘触发与水平触发完整可运行demo
  3. 3. 线上服务IO阻塞故障排查手册(含strace、perf命令实战)
    仅限本周,无偿分享

写在最后

阻塞和非阻塞,看似只是两个简单的形容词,背后却是操作系统对CPU和IO这对冤家的百年调优史。从BIO到NIO到AIO,每一次演进都在撕掉一层“等待”的标签。

如果你读懂了快递员的比喻,理解了下图,掌握了epoll的“回调+就绪队列”思维,那么恭喜你——你已经超过了99%的开发者,再也不会被“阻塞”二字难倒了


本文为「程序员秋天」原创,欢迎转发分享,请保留出处。

星球里分享AI编程、职场以及个人工作的感悟,以及公众号文章提到的资料,有需要的可以扫码限时免费加入。

最新文章

随机文章

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