当前位置:首页>Linux>linux系统编程(十):eventfd-timerfd-signalfd

linux系统编程(十):eventfd-timerfd-signalfd

  • 2026-08-25 21:15:54
linux系统编程(十):eventfd-timerfd-signalfd

eventfd / timerfd / signalfd —— 一切皆文件的现代演绎

Linux 把"任意事件"都做成 fd —— 计数器变 fd(eventfd),定时器变 fd(timerfd),信号变 fd(signalfd)。这些 fd 都能塞进 epoll,跟普通 socket / pipe 一起处理。这就是现代事件循环(libuv / libev / Boost.Asio)的标准玩法。


0. 引言:epoll 时代的"统一事件源"

老 Unix 时代每种事件用不同 API:

事件类型
老的处理方式
网络数据
select
 等 socket fd
定时器
alarm
 + SIGALRM
信号
signal
 handler
进程内通知
管道 / 条件变量

问题:异步信号安全限制、handler 不能复杂、跟 epoll 不能融合。

Linux 内核给出新答案:把所有事件都做成 fd,一个 epoll 全包。

事件源
老办法
新办法
进程内通知
pipe(占两个 fd)
eventfd
(一个 fd)
定时器
alarm + SIGALRM
timerfd
信号
signal handler
signalfd
进程退出
SIGCHLD + waitpid
pidfd(5.3+)
文件变化
inotify_init
inotify_init1

下面三个最常用的 fd 化事件源。


1. eventfd —— 进程内"通知一下"

#include<sys/eventfd.h>inteventfd(unsignedint initval, int flags);/* flags: EFD_NONBLOCK | EFD_CLOEXEC | EFD_SEMAPHORE */

返回一个 fd,内部维护一个 64 位无符号计数器。

1.1 默认模式(计数器累加)

int efd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);/* 写:累加到计数器 */uint64_t v = 1;write(efd, &v, sizeof v);    /* 计数 +1 */write(efd, &v, sizeof v);    /* 计数 +2 *//* 读:把累计计数取走,重置为 0 */uint64_t got;read(efd, &got, sizeof got); /* got = 2,计数 = 0 */

write 和 read 必须传 8 字节

1.2 信号量模式(EFD_SEMAPHORE)

int efd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC | EFD_SEMAPHORE);/* write 跟之前一样累加 */uint64_t v = 3;write(efd, &v, sizeof v);   /* 计数 = 3 *//* read 每次只减 1 */uint64_t got;read(efd, &got, sizeof got); /* got = 1,计数 = 2 */read(efd, &got, sizeof got); /* got = 1,计数 = 1 */read(efd, &got, sizeof got); /* got = 1,计数 = 0 */read(efd, &got, sizeof got); /* 阻塞 / EAGAIN */

像信号量。

1.3 用途:替代 self-pipe trick

老技巧"写 pipe 通知主线程退出循环":

/* 老 pipe 做法:占两个 fd */int p[2]; pipe(p);fcntl(p[0], F_SETFL, O_NONBLOCK);/* 信号 handler 里 */write(p[1], "x", 1);/* 主循环 */epoll_ctl(ep, EPOLL_CTL_ADD, p[0], &ev);

eventfd 一个 fd 搞定

int efd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);/* 通知 */uint64_t v = 1;write(efd, &v, sizeof v);/* 主循环 */epoll_ctl(ep, EPOLL_CTL_ADD, efd, &ev);

跨线程通知、跨进程通知(fork 后共享)都常用。

1.4 经典场景

场景
怎么用 eventfd
线程池
boss 线程把任务放队列后写 eventfd,worker 主循环 epoll_wait 醒来处理
优雅退出
信号 handler 写 eventfd,主循环 epoll_wait 醒来知道该停了
跨进程通知
fork 前创建 eventfd,父子都能用

2. timerfd —— 定时器变成 fd

#include<sys/timerfd.h>inttimerfd_create(int clockid, int flags);/* clockid: CLOCK_REALTIME / CLOCK_MONOTONIC / CLOCK_BOOTTIME ... * flags:   TFD_NONBLOCK | TFD_CLOEXEC */inttimerfd_settime(int fd, int flags,                    const struct itimerspec *new_value,                    struct itimerspec *old_value);struct itimerspec {    struct timespec it_interval;   /* 周期,0 = 单次定时器 */    struct timespec it_value;       /* 第一次触发时刻 */};

2.1 单次定时器:3 秒后触发一次

int tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);struct itimerspec spec = {    .it_value = {.tv_sec = 3, .tv_nsec = 0},    .it_interval = {0}    /* 0 = 不重复 */};timerfd_settime(tfd, 0, &spec, NULL);/* 加进 epoll */struct epoll_event ev = { .events = EPOLLIN, .data.fd = tfd };epoll_ctl(ep, EPOLL_CTL_ADD, tfd, &ev);/* 触发后 read 拿到 1 (过期次数) */uint64_t expirations;read(tfd, &expirations, sizeof expirations);

2.2 周期定时器:每秒触发

struct itimerspec spec = {    .it_value    = {.tv_sec = 1},   /* 1 秒后第一次 */    .it_interval = {.tv_sec = 1}    /* 之后每 1 秒一次 */};timerfd_settime(tfd, 0, &spec, NULL);

2.3 取消定时器

struct itimerspec stop = {0};   /* 全 0 表示停止 */timerfd_settime(tfd, 0, &stop, NULL);

2.4 跟 epoll 配合的经典场景

while (1) {    int n = epoll_wait(ep, evs, MAX, -1);    for (int i = 0; i < n; i++) {        if (evs[i].data.fd == tfd) {            uint64_t exp;            read(tfd, &exp, sizeof exp);            handle_timer();      /* 定时任务 */        } else {            /* 其他 fd */        }    }}

跟 alarm + SIGALRM 比,timerfd 的优势:

维度
timerfd 的改进
信号路径
不走信号,async-signal-safe 限制无关
多 timer 共存
多个 timer 互不干扰(alarm 全进程共一个)
时钟选择
可用 CLOCK_MONOTONIC不受系统时间跳变影响
跟 epoll 集成
天然作为 fd,跟其他 I/O 平等处理

3. signalfd —— 信号变 fd

#include<sys/signalfd.h>intsignalfd(int fd, constsigset_t *mask, int flags);/* flags: SFD_NONBLOCK | SFD_CLOEXEC */

3.1 用法

sigset_t mask;sigemptyset(&mask);sigaddset(&mask, SIGINT);sigaddset(&mask, SIGTERM);/* 必须先屏蔽这些信号,否则还会走默认/handler 路径 */pthread_sigmask(SIG_BLOCK, &mask, NULL);int sfd = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC);/* 加进 epoll */struct epoll_event ev = { .events = EPOLLIN, .data.fd = sfd };epoll_ctl(ep, EPOLL_CTL_ADD, sfd, &ev);/* 主循环 */while (1) {    epoll_wait(...);    if (evs[i].data.fd == sfd) {        struct signalfd_siginfo si;        while (read(sfd, &si, sizeof si) == sizeof si) {            printf("signal %d arrived\n", si.ssi_signo);            if (si.ssi_signo == SIGTERM) goto out;        }    }}out:

3.2 signalfd 解决了 signal handler 的痛点

痛点
signalfd 的改进
handler 受 async-signal-safe 限制
read 之后走主循环
,能 printf / malloc / 调用任何函数
多信号到达可能丢失
内核排队,read 一次拿一个 siginfo 不丢
跟 epoll 集成困难
信号变 fd,跟其他 fd 平等处理

4. 三者对比

特性
eventfd
timerfd
signalfd
触发方式
显式 write
时间到期
信号到达
read 拿到
64 位计数器
过期次数
siginfo_t
典型场景
线程间唤醒
定时任务
优雅退出
不用时怎么办
self-pipe
alarm/setitimer
signal handler

5. 三个一起用:完整事件循环骨架

#include<sys/epoll.h>#include<sys/eventfd.h>#include<sys/timerfd.h>#include<sys/signalfd.h>#include<signal.h>#include<unistd.h>#include<stdio.h>intmain(void){    /* 1. 屏蔽信号 → 走 signalfd */    sigset_t mask;    sigemptyset(&mask);    sigaddset(&mask, SIGINT);    sigaddset(&mask, SIGTERM);    pthread_sigmask(SIG_BLOCK, &mask, NULL);    int sfd = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC);    /* 2. 1秒周期 timer */    int tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);    struct itimerspec spec = {{10}, {10}};    timerfd_settime(tfd, 0, &spec, NULL);    /* 3. 任务通知 */    int efd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);    /* 4. epoll 把它们都加进来 */    int ep = epoll_create1(EPOLL_CLOEXEC);    struct epoll_event ev;    ev.events = EPOLLIN;    ev.data.fd = sfd; epoll_ctl(ep, EPOLL_CTL_ADD, sfd, &ev);    ev.data.fd = tfd; epoll_ctl(ep, EPOLL_CTL_ADD, tfd, &ev);    ev.data.fd = efd; epoll_ctl(ep, EPOLL_CTL_ADD, efd, &ev);    /* 5. 主循环 */    struct epoll_event evs[16];    int running = 1;    while (running) {        int n = epoll_wait(ep, evs, 16-1);        for (int i = 0; i < n; i++) {            int fd = evs[i].data.fd;            if (fd == sfd) {                struct signalfd_siginfo si;                read(sfd, &si, sizeof si);                printf("signal %d → exit\n", si.ssi_signo);                running = 0;            } else if (fd == tfd) {                uint64_t exp; read(tfd, &exp, sizeof exp);                printf("tick\n");            } else if (fd == efd) {                uint64_t v; read(efd, &v, sizeof v);                printf("got notify x%lu\n", v);            }        }    }    close(sfd); close(tfd); close(efd); close(ep);    return 0;}

50 行做出一个能"周期任务 + 接信号优雅退出 + 接受外部通知"的事件循环。 现代框架(libuv / libevent / Asio)的内核就是这个套路。


6. 一些细节坑

6.1 eventfd 必须读写 8 字节

char c = 1;write(efd, &c, 1);   /* 错误,必须 8 字节 */

6.2 signalfd 之前必须屏蔽信号

不屏蔽,信号会走默认路径或注册的 handler,signalfd 拿不到。

6.3 timerfd 的 CLOCK_REALTIME 会被时间跳变影响

服务器调时间或 NTP 跳变,CLOCK_REALTIME 的 timerfd 可能立刻过期或永远不到期。做超时控制用 CLOCK_MONOTONIC

6.4 epoll 拿到事件后必须 read,否则 LT 模式下死循环

read 出来才会清除"就绪"状态。否则 epoll_wait 一直返回这个 fd。

6.5 read signalfd 拿不全多个挂起信号

每次只拿 sizeof(signalfd_siginfo)。要循环 read 直到 EAGAIN:

while (read(sfd, &si, sizeof si) == sizeof si) {    handle(si);}

7. 总结

函数
作用
替代什么
eventfd(0, flags)
进程内/跨进程通知
self-pipe trick
timerfd_create + settime
单次/周期定时器
alarm / setitimer
signalfd
信号 fd 化
signal handler

三者放一起的精髓:

任意事件源都能变成 fd → 全部塞进 epoll → 单线程统一处理

这就是 Linux 现代事件循环的根基,理解之后再看 libuv / libevent / Boost.Asio / nginx / Redis 的网络层,会发现底层都是这套架构。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-26 04:54:40 HTTP/2.0 GET : https://f.mffb.com.cn/a/512260.html
  2. 运行时间 : 0.434533s [ 吞吐率:2.30req/s ] 内存消耗:4,673.89kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=912bb6bdb4842078765cf8e58d7d9032
  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.001189s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001558s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003247s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000737s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001377s ]
  6. SELECT * FROM `set` [ RunTime:0.001309s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001977s ]
  8. SELECT * FROM `article` WHERE `id` = 512260 LIMIT 1 [ RunTime:0.001759s ]
  9. UPDATE `article` SET `lasttime` = 1787691280 WHERE `id` = 512260 [ RunTime:0.071399s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.001739s ]
  11. SELECT * FROM `article` WHERE `id` < 512260 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004171s ]
  12. SELECT * FROM `article` WHERE `id` > 512260 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003205s ]
  13. SELECT * FROM `article` WHERE `id` < 512260 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.138954s ]
  14. SELECT * FROM `article` WHERE `id` < 512260 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006400s ]
  15. SELECT * FROM `article` WHERE `id` < 512260 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011807s ]
0.438274s