当前位置:首页>Linux>linux系统编程(八):阻塞与非阻塞IO对比

linux系统编程(八):阻塞与非阻塞IO对比

  • 2026-08-18 23:11:53
linux系统编程(八):阻塞与非阻塞IO对比

阻塞 vs 非阻塞 I/O —— 同一个 read 的两种世界

同样调 read(fd, buf, n),加不加 O_NONBLOCK 行为完全不一样:阻塞模式下没数据就睡到天荒地老;非阻塞模式下立即返回 EAGAIN,剩下的得自己 poll。这篇把阻塞与非阻塞的行为差异、各自适用场景、EAGAIN 处理、跟事件循环的搭配讲清楚。


0. 引言:read 没数据怎么办?

int fd = open("/dev/tty", O_RDONLY);   /* 终端 */char buf[100];ssize_t n = read(fd, buf, 100);/* 终端没人输入,read 一直不返回,进程卡死 */
int fd = open("/dev/tty", O_RDONLY | O_NONBLOCK);char buf[100];ssize_t n = read(fd, buf, 100);/* n = -1, errno = EAGAIN —— 立即返回 */

默认是阻塞。加 O_NONBLOCK 就是非阻塞。这是 Linux I/O 编程的根本分水岭。


1. 阻塞 I/O:让内核帮你等

1.1 阻塞 read 的行为

ssize_t n = read(fd, buf, 100);
情况
行为
返回值
有数据
立刻返回
实际字节数(≤ 100)
无数据 + 有数据来
进程睡眠
 → 醒来读到
实际字节数
无数据 + 对端关闭
进程睡眠 → 醒来
0
(EOF)
无数据 + 出错(信号、磁盘错)
进程睡眠 → 醒来
-1
errno 给原因

阻塞期间进程在内核的等待队列里睡,不消耗 CPU

1.2 阻塞 write 的行为

ssize_t n = write(fd, buf, 100);
情况
行为
缓冲足够
写完返回(可能短写,要循环写)
缓冲满(pipe / socket)
进程睡眠
,等到有空间再继续写

1.3 阻塞 accept、connect

int conn = accept(srv, NULLNULL);connect(s, &addr, sizeof addr);
调用
阻塞条件
醒来时机
accept
没有新连接到达
三次握手完成,新 fd 出现在 backlog 队列
connect
三次握手未完成
收到 SYN-ACK(成功)/ 超时 / RST(失败)

1.4 阻塞模式的优点

/* 实现一个简单的服务器只需要 */while (1) {    int conn = accept(srv, NULLNULL);    handle_request(conn);    close(conn);}

代码线性、直观——"做完这一步再做下一步"的思维。适合的场景:

场景
典型例子
单连接客户端
curl
 风格的 CLI 工具
每连接一进程/线程的服务
pre-fork(Apache prefork)、per-thread
简单脚本和工具
任何不追求并发的小程序

1.5 阻塞模式的局限

一个进程/线程只能等一个 fd。要同时处理 1000 个连接,要么 1000 个线程(开销大),要么改用非阻塞 + 多路复用。


2. 非阻塞 I/O:来不及就立即返回

2.1 怎么开启

两种方式:

/* 方式 1open 时设 */int fd = open(path, O_RDONLY | O_NONBLOCK);/* 方式 2fcntl 改 */int flags = fcntl(fd, F_GETFL);fcntl(fd, F_SETFL, flags | O_NONBLOCK);

socket 也一样:

int s = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);   /* 一步到位 */

2.2 非阻塞 read 的行为

ssize_t n = read(fd, buf, 100);
  • 有数据:立刻返回(≤ 100 字节)
  • 无数据:立刻返回 -1,errno = EAGAIN(== EWOULDBLOCK
  • 对端关闭:返回 0
  • 出错:返回 -1,errno 不是 EAGAIN
ssize_t n = read(fd, buf, 100);if (n < 0) {    if (errno == EAGAIN || errno == EWOULDBLOCK) {        /* 没数据,不是错误,稍后再试 */    } else if (errno == EINTR) {        /* 信号打断,重试 */    } else {        /* 真的出错了 */        perror("read");    }}

2.3 非阻塞 write 的行为

ssize_t n = write(fd, buf, 1000);
  • 缓冲有空间:写一部分(可能短于 1000),返回写入字节数
  • 缓冲完全满:返回 -1,errno = EAGAIN
  • 不会阻塞等空间

工程上 write 经常短写,非阻塞下要循环 + EAGAIN 检测:

ssize_t total = 0;while (total < n) {    ssize_t w = write(fd, buf + total, n - total);    if (w < 0) {        if (errno == EINTR) continue;        if (errno == EAGAIN) {            /* 缓冲满了,先停下,等可写事件再继续 */            break;        }        return -1;    }    total += w;}return total;

2.4 非阻塞 accept、connect

/* 非阻塞 accept */int conn = accept(srv, NULLNULL);if (conn < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {    /* 暂时没新连接 */}/* 非阻塞 connect 比较特殊 */int rc = connect(s, &addr, sizeof addr);if (rc < 0 && errno == EINPROGRESS) {    /* 三次握手还在进行,要 select/epoll 等可写事件 */}

3. 阻塞 vs 非阻塞 行为对比

行为
阻塞
非阻塞
read 没数据
进程睡眠等
返回 -1, errno=EAGAIN
write 缓冲满
进程睡眠等
返回 -1 或部分写入
accept 没连接
睡眠等
返回 -1, errno=EAGAIN
connect 三次握手
等到完成
立刻返回,errno=EINPROGRESS
CPU 占用
等的时候不占
一样不占(前提是配合 poll/epoll)
代码风格
线性、易读
事件驱动、状态机
一线程能服务的 fd 数
1(每个 fd 一个线程)
海量(配合多路复用)

4. EAGAIN:不是错误,是"稍后再试"

EAGAIN 跟 EWOULDBLOCK 在 Linux 上是同一个值(11),有些 Unix 上不同。代码里两个都判断更稳:

if (errno == EAGAIN || errno == EWOULDBLOCK) { ... }

或者直接用宏:

#ifndef EWOULDBLOCK#define EWOULDBLOCK EAGAIN#endif

4.1 EAGAIN 的处理选项

  1. 忙轮询(busy poll):立即重试。几乎从不该这么写,浪费 100% CPU。

    while (1) {    ssize_t n = read(fd, buf, 100);    if (n >= 0break;    if (errno != EAGAIN) { error; break; }    /* spin again */}
  2. 加 sleep 退避:每次失败 sleep 几 ms。简单粗暴,延迟大。

  3. 用多路复用select / poll / epoll 等"可读"事件再读。唯一推荐的方式


5. 非阻塞 + 多路复用:现代服务器的标配

非阻塞本身没有意义,必须配合多路复用才发挥价值:

伪代码:

int epfd = epoll_create1(EPOLL_CLOEXEC);/* 注册若干非阻塞 fd 到 epfd */while (1) {    struct epoll_event evs[64];    int n = epoll_wait(epfd, evs, 64-1);    for (int i = 0; i < n; i++) {        int fd = evs[i].data.fd;        if (evs[i].events & EPOLLIN) {            /* 可读:循环 read 直到 EAGAIN */            while (1) {                ssize_t r = read(fd, buf, sizeof buf);                if (r > 0handle(fd, buf, r);                else if (r == 0) { close(fd); break; }                else if (errno == EAGAIN) break;                else { close(fd); break; }            }        }    }}

关键:每个 fd 都要"读到 EAGAIN 才停",否则下一次 epoll_wait 不一定再触发(取决于 LT/ET 模式,下篇细讲)。


6. 阻塞 vs 非阻塞 选型指南


7. 几个常被搞错的点

7.1 fcntl 改 flags 时要先读再改

/* ⛔ 错:直接覆盖了所有 flags */fcntl(fd, F_SETFL, O_NONBLOCK);/* ✅ 对:保留其他 flags,只加 O_NONBLOCK */int flags = fcntl(fd, F_GETFL);fcntl(fd, F_SETFL, flags | O_NONBLOCK);

7.2 dup 出来的 fd 共享 flags

O_NONBLOCK 是 file 级的(不是 fd 级),所以同一个 file 的所有 fd 行为一致:

int fd1 = open(...);int fd2 = dup(fd1);fcntl(fd1, F_SETFL, O_NONBLOCK);/* fd2 也变非阻塞了 */

7.3 stdin 别随便设非阻塞

stdin 跟 stdout、stderr 经常是同一个 file(终端)。给 stdin 设 O_NONBLOCK 会让 stdout 也变非阻塞,printf 行为可能错乱。

要么 dup 一份再改,要么用 unlocked stdio。

7.4 阻塞模式下也可能短读

ssize_t n = read(fd, buf, 100);    /* n 可能是 50,不是 100 */

阻塞 read 等到"有任何数据"就返回,不一定填满 buf。循环 read 是必须的(这一点跟非阻塞一样)。

7.5 connect 非阻塞返回 EINPROGRESS 不是错误

int rc = connect(s, &addr, sizeof addr);if (rc == 0) {    /* 立即成功(罕见,本机 unix socket 可能)*/else if (errno == EINPROGRESS) {    /* 三次握手在进行,select/epoll 等可写事件,再用 SO_ERROR 取结果 */    int err;    socklen_t len = sizeof err;    getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len);    if (err == 0) { /* 连接成功 */ }    else { /* 连接失败,err 是真正的错误码 */ }}

7.6 SIGPIPE 在两种模式下都会发

写关闭的 socket / pipe 触发 SIGPIPE,跟阻塞/非阻塞无关。忽略 SIGPIPE 永远是对的

signal(SIGPIPE, SIG_IGN);

8. 异步 I/O:跟非阻塞的区别

很多人混淆"非阻塞"和"异步"。两者完全不同

维度
非阻塞
异步 (POSIX AIO / io_uring)
调用
立即返回(成功或 EAGAIN)
立即返回(请求已提交)
数据搬运
你自己 read/write
内核帮你做
完成通知
配合 epoll 你自己 read
完成事件通知(信号/cqe)
模型
“Reactor”
“Proactor”
适用
网络 I/O 主流
磁盘 I/O,io_uring 也用于网络

经典 epoll 风格是 non-blocking I/O + readiness notification,不是真正的异步。Linux 的 io_uring(5.1+)才是真异步。


9. 一个完整对比例子:echo server

9.1 阻塞版本(简单但每连接一线程)

void *handle(void *arg){    int conn = (intptr_t)arg;    char buf[1024];    ssize_t n;    while ((n = read(conn, buf, sizeof buf)) > 0) {        write(conn, buf, n);    }    close(conn);    return NULL;}intmain(void){    int srv = socket(AF_INET, SOCK_STREAM, 0);    /* bind + listen ... */    while (1) {        int conn = accept(srv, NULLNULL);    /* 阻塞 */        pthread_t tid;        pthread_create(&tid, NULL, handle, (void*)(intptr_t)conn);        pthread_detach(tid);    }}

简单直观。但每连接一个线程,10K 连接 = 10K 线程 = 80MB 栈(默认 8MB / 线程,一些系统起码 8KB),调度开销也大。

9.2 非阻塞 + epoll 版本(C10K)

intmain(void){    int srv = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);    /* bind + listen ... */    int epfd = epoll_create1(EPOLL_CLOEXEC);    struct epoll_event ev = { .events = EPOLLIN, .data.fd = srv };    epoll_ctl(epfd, EPOLL_CTL_ADD, srv, &ev);    while (1) {        struct epoll_event evs[64];        int n = epoll_wait(epfd, evs, 64-1);        for (int i = 0; i < n; i++) {            int fd = evs[i].data.fd;            if (fd == srv) {                int conn;                while ((conn = accept4(srv, NULLNULL, SOCK_NONBLOCK)) >= 0) {                    ev.events = EPOLLIN | EPOLLET;                    ev.data.fd = conn;                    epoll_ctl(epfd, EPOLL_CTL_ADD, conn, &ev);                }            } else {                char buf[1024];                ssize_t r;                while ((r = read(fd, buf, sizeof buf)) > 0) {                    /* 简单回写(生产代码要处理写不完的情况)*/                    write(fd, buf, r);                }                if (r == 0 || (r < 0 && errno != EAGAIN)) {                    close(fd);                }            }        }    }}

单线程能扛 10K~100K 连接。代码复杂得多,要管 fd 状态、缓冲、超时等等。


10. 总结

选项
阻塞 I/O
非阻塞 I/O
默认
✅ 不设 O_NONBLOCK
显式 O_NONBLOCK
编程模型
同步线性
事件驱动 / 状态机
等待方式
内核让进程睡
用户层用 epoll
适合连接数
小到中
大到极大
代码复杂度
学习曲线

经验法则:

  • 简单工具 / 客户端 / 小服务
    :阻塞 + 多线程,写得快、跑得稳
  • 大并发服务
    :非阻塞 + epoll,C10K+ 必备
  • 磁盘 IO 性能敏感
    :考虑 io_uring 真正异步

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:36:06 HTTP/2.0 GET : https://f.mffb.com.cn/a/509713.html
  2. 运行时间 : 0.690354s [ 吞吐率:1.45req/s ] 内存消耗:4,940.31kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1508fd29952344b19c7f7e40c1b5f903
  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.001091s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001740s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.102129s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.101720s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001953s ]
  6. SELECT * FROM `set` [ RunTime:0.025055s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001928s ]
  8. SELECT * FROM `article` WHERE `id` = 509713 LIMIT 1 [ RunTime:0.022384s ]
  9. UPDATE `article` SET `lasttime` = 1787290567 WHERE `id` = 509713 [ RunTime:0.010898s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.052280s ]
  11. SELECT * FROM `article` WHERE `id` < 509713 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.071742s ]
  12. SELECT * FROM `article` WHERE `id` > 509713 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.040002s ]
  13. SELECT * FROM `article` WHERE `id` < 509713 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004297s ]
  14. SELECT * FROM `article` WHERE `id` < 509713 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.048794s ]
  15. SELECT * FROM `article` WHERE `id` < 509713 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007116s ]
0.694727s