当前位置:首页>Linux>Linux异步AIO深度解析

Linux异步AIO深度解析

  • 2026-03-08 05:01:09
Linux异步AIO深度解析

在高并发、高吞吐的业务场景中,I/O性能往往是系统的核心瓶颈。无论是分布式存储、高并发Web服务,还是大数据处理,传统同步I/O的阻塞特性都会导致CPU资源浪费,无法充分发挥硬件潜力。Linux 6.6内核作为稳定版的重要迭代,在异步IO(AIO)的兼容性、性能优化上有了进一步提升,结合经典的GNU C库AIO与内核AIO实现,能为开发者提供更高效的I/O解决方案。本文将基于Linux 6.6内核,从概念、实现、实操到驱动适配,全面拆解Linux异步IO的技术细节。

一、异步IO核心概念:打破同步阻塞的性能桎梏

在聊异步IO之前,我们先明确一个核心对比:同步I/O与异步I/O的本质区别。

Linux中最常用的I/O模型是同步I/O,其核心特点是:当应用程序发起I/O请求后,会一直阻塞,直到I/O操作完成才能继续执行。这种方式的优势是实现简单,等待期间不占用CPU,但致命缺点是——当I/O请求耗时较长时,CPU会处于空闲状态,无法与I/O操作并行,导致系统吞吐率难以提升。

而异步IO则彻底打破了这种阻塞逻辑:应用程序发起I/O请求后,无需等待I/O完成,可立即继续执行后续的CPU计算任务;待I/O操作完成后,系统会通过“主动查询”或“回调通知”的方式,告知应用程序结果。这种“CPU与I/O并行”的特性,能最大限度利用硬件资源,尤其适合I/O密集型场景。

举个通俗的例子:同步I/O就像去餐厅点餐,点完后必须站在柜台等待取餐,期间什么都做不了;而异步I/O则是点完餐后,拿到取餐码,可去旁边休息、玩手机(CPU计算),等餐做好后(I/O完成),餐厅会叫号通知你取餐。

Linux 6.6内核对异步IO的支持更加完善,不仅兼容传统的GNU C库AIO和内核AIO(libaio),还优化了I/O调度逻辑,减少了AIO请求的延迟,让高并发场景下的I/O性能更稳定。

二、Linux 6.6 异步IO的两种核心实现:用户态与内核态

Linux的AIO有两种主流实现方式,分别是用户空间的GNU C库AIO和内核空间的内核AIO(需结合libaio使用)。两者的实现逻辑、适用场景不同,在Linux 6.6中均得到了良好支持,开发者可根据业务需求选择。

2.1 GNU C库AIO:用户态实现,简单易用

GNU C库(glibc)中的AIO是用户态的实现,其本质是“多线程模拟异步”——底层通过开启新的辅助线程,以同步I/O的方式完成操作,辅助线程与发起AIO的主线程通过pthread_cond_signal()实现线程间同步。这种方式无需修改内核,实现简单,兼容性好,适合对性能要求不极致、追求开发效率的场景。

Linux 6.6中,glibc的AIO函数集完全兼容旧版本,核心函数不变,主要包括以下7个关键函数,涵盖了异步读、写、状态查询、取消等全流程操作:

核心函数详解(附Linux 6.6兼容说明)

  1. aio_read():发起异步读操作,支持文件、套接字、管道等多种文件描述符。函数原型为int aio_read( struct aiocb *aiocbp ),请求排队后立即返回(无需等待读完成),成功返回0,失败返回-1并设置errno。其中aiocb结构体是核心,包含了I/O传输的所有信息(缓冲区、文件描述符、偏移量等),用于唯一标识I/O操作。

  2. aio_write():发起异步写操作,原型与aio_read()类似(int aio_write( struct aiocb *aiocbp )),逻辑一致,仅作用是写数据。

  3. aio_error():查询异步I/O请求的状态,原型为int aio_error( struct aiocb *aiocbp )。返回值有三种:EINPROGRESS(请求未完成)、ECANCELED(请求被取消)、-1(发生错误,errno记录具体原因)。

  4. aio_return():获取异步I/O的返回结果,原型为ssize_t aio_return( struct aiocb *aiocbp )。注意:必须先通过aio_error()确认请求已完成,才能调用该函数,其返回值与同步read/write的返回值一致(传输字节数或错误码)。

  5. aio_suspend():阻塞进程,直到指定的一个或多个AIO请求完成。原型为int aio_suspend( const struct aiocb *const cblist[], int n, const struct timespec *timeout ),适合需要等待多个AIO请求完成后再继续执行的场景。

  6. aio_cancel():取消指定文件描述符上的一个或所有AIO请求,原型为int aio_cancel(int fd, struct aiocb *aiocbp)。取消单个请求需传入aiocb指针,取消所有请求则将aiocb设为NULL,返回值标识取消结果(AIO_CANCELED、AIO_NOT_CANCELED等)。

  7. lio_listio():一次性发起多个异步I/O请求,是提升高并发I/O效率的关键函数。原型为int lio_listio( int mode, struct aiocb *list[], int nent, struct sigevent *sig ),mode参数可设为LIO_WAIT(阻塞直到所有请求完成)或LIO_NOWAIT(请求排队后立即返回),支持批量发起读、写操作。

Linux 6.6 实操示例:GNU C库异步读

以下是基于Linux 6.6的GNU C库AIO异步读示例,可直接编译运行:

#include<aio.h>#include<stdio.h>#include<fcntl.h>#include<stdlib.h>#include<string.h>#define BUFSIZE 4096intmain(){int fd, ret;structaiocbmy_aiocb;// 打开文件    fd = open("file.txt", O_RDONLY);if (fd < 0) {        perror("open failed");exit(1);    }// 清零aiocb结构体,初始化参数    bzero(&my_aiocb, sizeof(struct aiocb));// 分配缓冲区(需保证足够空间)    my_aiocb.aio_buf = malloc(BUFSIZE + 1);if (!my_aiocb.aio_buf) {        perror("malloc failed");        close(fd);exit(1);    }// 设置文件描述符、读取字节数、文件偏移量    my_aiocb.aio_fildes = fd;    my_aiocb.aio_nbytes = BUFSIZE;    my_aiocb.aio_offset = 0;// 发起异步读请求    ret = aio_read(&my_aiocb);if (ret < 0) {        perror("aio_read failed");free(my_aiocb.aio_buf);        close(fd);exit(1);    }// 等待I/O完成(循环查询状态)while (aio_error(&my_aiocb) == EINPROGRESS) {// 等待期间可执行其他CPU计算任务continue;    }// 获取返回结果,处理数据    ret = aio_return(&my_aiocb);if (ret > 0) {printf("异步读成功,读取字节数:%d\n", ret);printf("读取内容:%s\n", (char*)my_aiocb.aio_buf);    } else {        perror("aio read error");    }// 释放资源free(my_aiocb.aio_buf);    close(fd);return0;}

编译命令:gcc aio_read_demo.c -o aio_read_demo -lrt(Linux 6.6中-lrt可省略,默认链接相关库),运行前需创建file.txt文件并写入内容。

2.2 内核AIO + libaio:内核态实现,极致性能

与glibc的用户态AIO不同,内核AIO是Linux内核原生支持的异步I/O实现(自Linux 2.6起成为标准特性),Linux 6.6对其进行了性能优化,减少了上下文切换和系统调用开销,尤其适合对I/O性能要求极高的场景(如块设备、网络设备的高并发I/O)。

内核AIO的核心优势的是“真正的异步”——无需用户态线程模拟,直接由内核调度I/O操作,与应用程序的CPU计算完全并行。在用户空间,需通过libaio库调用内核AIO的系统调用,完成I/O请求的发起、等待和结果获取。

Linux 6.6 内核AIO核心系统调用

内核AIO的系统调用由libaio封装,核心函数如下(Linux 6.6完全兼容,无API变更):

  • io_setup(int maxevents, io_context_t *ctxp):初始化AIO上下文,maxevents指定最大可同时处理的AIO事件数。

  • io_destroy(io_context_t ctx):销毁AIO上下文,释放资源。

  • io_prep_pread/io_prep_pwrite:初始化I/O控制块(iocb结构体),分别用于异步读、写操作,设置文件描述符、缓冲区、读取/写入长度和偏移量。

  • io_submit(io_context_t ctx, long nr, struct iocb *ios[]):提交异步I/O请求,nr为请求数量,ios为iocb结构体数组。

  • io_getevents(io_context_t ctx_id, long min_nr, long nr, struct io_event *events, struct timespec *timeout):等待AIO请求完成,获取事件结果。

  • io_set_callback(struct iocb *iocb, io_callback_t cb):设置AIO请求完成后的回调函数,实现异步通知。

Linux 6.6 实操示例:libaio调用内核AIO读文件

以下示例基于Linux 6.6,使用libaio调用内核AIO,实现文件异步读操作,可直接编译运行(需安装libaio-dev):

#define _GNU_SOURCE     /* O_DIRECT 非POSIX标准,需定义此宏 */#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<string.h>#include<stdlib.h>#include<libaio.h>#define BUF_SIZE 4096  // 缓冲区大小,与块设备对齐intmain(int argc, char **argv){io_context_t ctx = 0;structiocbcb;structiocb *cbs[1];unsignedchar *buf;structio_eventevents[1];int ret, fd;// 检查参数,传入待读取的文件路径if (argc < 2) {printf("使用方式:%s [待读取文件路径]\n", argv[0]);exit(1);    }// 打开文件,O_DIRECT表示直接I/O,避免内核缓存,提升AIO性能    fd = open(argv[1], O_RDWR | O_DIRECT);if (fd < 0) {        perror("open error");goto err;    }// 分配对齐的内存(O_DIRECT要求缓冲区地址与块设备对齐,此处512字节对齐)    ret = posix_memalign((void **)&buf, 512, BUF_SIZE + 1);if (ret < 0) {        perror("posix_memalign failed");goto err1;    }memset(buf, 0, BUF_SIZE + 1);  // 清零缓冲区// 初始化AIO上下文,最大支持128个事件    ret = io_setup(128, &ctx);if (ret < 0) {printf("io_setup error: %s\n", strerror(-ret));goto err2;    }// 初始化iocb结构体,设置异步读操作    io_prep_pread(&cb, fd, buf, BUF_SIZE, 0);    cbs[0] = &cb;// 提交异步读请求    ret = io_submit(ctx, 1, cbs);if (ret != 1) {if (ret < 0) {printf("io_submit error: %s\n", strerror(-ret));        } else {fprintf(stderr"提交I/O请求失败\n");        }goto err3;    }// 等待AIO请求完成,获取结果    ret = io_getevents(ctx, 11, events, NULL);if (ret != 1) {if (ret < 0) {printf("io_getevents error: %s\n", strerror(-ret));        } else {fprintf(stderr"获取I/O事件失败\n");        }goto err3;    }// 处理读取结果if (events[0].res2 == 0) {printf("异步读成功,读取内容:\n%s\n", buf);    } else {printf("AIO error: %s\n", strerror(-events[0].res));goto err3;    }// 释放资源(正常流程)    io_destroy(ctx);free(buf);    close(fd);return0;// 错误处理流程err3:    io_destroy(ctx);err2:free(buf);err1:    close(fd);err:return-1;}

编译命令:gcc aio_kernel_demo.c -o aio_kernel_demo -laio,运行命令:./aio_kernel_demo test.txt(test.txt为待读取文件)。

注意:Linux 6.6中,O_DIRECT标志的使用需保证缓冲区地址与块设备对齐(示例中使用posix_memalign实现512字节对齐),否则会报错;若不需要直接I/O,可去掉O_DIRECT标志,无需严格对齐缓冲区。

三、Linux 6.6 AIO与设备驱动:底层适配细节

异步I/O的最终执行,离不开设备驱动的支持。在Linux 6.6内核中,AIO的底层适配主要依赖file_operations结构体中的3个AIO相关成员函数,用户空间调用io_submit()后,内核会生成对应的kiocb结构体(与用户态的iocb对应),并间接调用驱动中的这些函数。

3.1 驱动中的AIO相关函数原型

Linux 6.6中,file_operations结构体的AIO成员函数采用新版本原型,支持多段缓冲区(iovec向量),相比旧版本更灵活:

// 异步读函数ssize_t (*aio_read) (struct kiocb *iocb, const struct iovec *iov, unsignedlong nr_segs, loff_t pos);// 异步写函数ssize_t (*aio_write) (struct kiocb *iocb, const struct iovec *iov, unsignedlong nr_segs, loff_t pos);// 异步同步函数int (*aio_fsync) (struct kiocb *iocb, int datasync);

旧版本原型仅支持单个缓冲区指针,而新版本的iovec向量可传递多段不连续的缓冲区,适合大文件读写、分散-聚集I/O场景,Linux 6.6已完全兼容新版本原型,旧版本原型仅用于兼容legacy驱动。

3.2 驱动适配注意事项(Linux 6.6)

  • 块设备、网络设备:Linux 6.6内核核心层已完成AIO适配,开发者无需额外实现驱动的AIO函数,直接使用内核提供的通用逻辑即可,可通过AIO充分利用块层I/O调度和网卡收发能力。

  • 字符设备:大部分字符设备无需实现AIO支持,内核会通过同步I/O模拟异步I/O;仅特殊字符设备(如null、zero设备)需要实现AIO函数,示例如下(zero设备的aio_read实现,来自Linux 6.6内核源码):

staticssize_taio_read_zero(struct kiocb *iocb, const struct iovec *iov,unsignedlong nr_segs, loff_t pos){size_t written = 0;unsignedlong i;ssize_t ret;// 遍历所有iovec缓冲区,写入0for (i = 0; i < nr_segs; i++) {                ret = read_zero(iocb->ki_filp, iov[i].iov_base, iov[i].iov_len,                                &pos);if (ret < 0)break;                written += ret;        }return written ? written : -EFAULT;}

注意:zero设备的AIO实现本质上没有真正的异步操作(因为设备本身无需等待I/O完成),但可作为字符设备AIO适配的参考模板。

四、Linux 6.6 AIO性能优化与最佳实践

Linux 6.6内核在AIO性能上的优化,主要集中在I/O调度、上下文切换和内存管理三个方面,结合以下最佳实践,可进一步提升AIO性能:

4.1 选择合适的AIO实现

  • 轻量级场景(如普通文件读写、低并发):优先使用GNU C库AIO,开发效率高,无需依赖额外库(除glibc外)。

  • 高性能场景(如块设备、高并发网络I/O):优先使用内核AIO + libaio,避免用户态线程模拟带来的上下文切换开销,充分利用内核调度能力。

4.2 优化缓冲区与I/O请求参数

  • 缓冲区对齐:使用O_DIRECT直接I/O时,缓冲区地址需与块设备对齐(通常512字节或4096字节),避免内核额外拷贝,Linux 6.6中可通过posix_memalign或memalign实现对齐。

  • 批量请求:使用lio_listio()(glibc AIO)或批量提交io_submit()(内核AIO),减少系统调用次数,提升并发效率。

  • 合理设置maxevents:io_setup()的maxevents参数需根据业务并发量设置,过大易造成内存浪费,过小会导致AIO请求阻塞,建议设置为并发I/O请求数的1.2~1.5倍。

4.3 避免常见坑点

  • 内核AIO不支持普通文件的缓存I/O:若需使用内核缓存,需放弃O_DIRECT标志,或使用glibc AIO。

  • aio_return()的调用时机:必须先通过aio_error()确认I/O请求完成,否则会导致未定义行为,Linux 6.6中会直接返回错误。

  • 资源释放:AIO上下文(io_context_t)、缓冲区、文件描述符必须正确释放,否则会造成内存泄漏,尤其在异常流程中,需做好错误处理。

五、总结:Linux 6.6 AIO的应用价值与未来

异步IO作为Linux高并发I/O的核心技术,在Linux 6.6内核中得到了进一步完善,无论是用户态的GNU C库AIO,还是内核态的libaio,都能为不同场景提供高效的I/O解决方案。其核心价值在于“打破同步阻塞,实现CPU与I/O并行”,从而提升系统吞吐率,降低延迟,尤其适合I/O密集型业务。

对于开发者而言,掌握Linux 6.6 AIO的两种实现方式、实操细节和驱动适配要点,能在分布式存储、高并发Web服务、大数据处理等场景中,充分发挥硬件潜力,打造高性能的Linux应用。未来,随着Linux内核的持续迭代,AIO将在低延迟、高并发场景中发挥更重要的作用,比如结合IO_URING(Linux 5.10+引入的异步I/O框架),进一步提升I/O性能。

附录:参考资料

  • Linux 6.6内核源码(fs/aio.c、drivers/char/mem.c)

  • GNU C库AIO官方文档:http://www.gnu.org/software/libc/manual/html_node/Asynchronous-I_002fO.html

  • AIO与向量操作文档:https://lwn.net/Articles/170954/

  • C10K问题详解:http://www.kegel.com/c10k.html

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 15:09:59 HTTP/2.0 GET : https://f.mffb.com.cn/a/478250.html
  2. 运行时间 : 0.092214s [ 吞吐率:10.84req/s ] 内存消耗:4,420.28kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=948003cd6ae3cf2828ea1939ab5ce67d
  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.000468s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000691s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000366s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002995s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000608s ]
  6. SELECT * FROM `set` [ RunTime:0.000329s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000613s ]
  8. SELECT * FROM `article` WHERE `id` = 478250 LIMIT 1 [ RunTime:0.000413s ]
  9. UPDATE `article` SET `lasttime` = 1774595399 WHERE `id` = 478250 [ RunTime:0.000421s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000220s ]
  11. SELECT * FROM `article` WHERE `id` < 478250 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004152s ]
  12. SELECT * FROM `article` WHERE `id` > 478250 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000523s ]
  13. SELECT * FROM `article` WHERE `id` < 478250 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004006s ]
  14. SELECT * FROM `article` WHERE `id` < 478250 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004378s ]
  15. SELECT * FROM `article` WHERE `id` < 478250 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005417s ]
0.093715s