当前位置:首页>Linux>Linux:自定义工作队列的使用

Linux:自定义工作队列的使用

  • 2026-08-18 23:10:25
Linux:自定义工作队列的使用

文章目录

    • 一、工作队列的选择
    • 二、自定义工作队列介绍
      • 2.1、工作队列相关结构体
        • ① work_struct工作项:
        • ② workqueue_struct 工作队列
      • 2.2、工作队列相关接口函数
        • 2.2.1、关键API:创建与添加
          • ① 创建工作队列
          • ② 将工作项添加到队列(源头queue_work_on)
        • 2.2.2、关键API:取消与清理
          • ① 取消已调度的工作
          • ② 强制处理队列中的所有工作
          • ③ 删除工作队列
          • ④ 使用流程总结
    • 三、自定义共享队列案例

    沉淀、分享、成长,让自己和他人都能有所收获!😄

    学习原因


    共享工作队列是全局共享的,任务执行会相互影响,对于有特殊需求的驱动(如需要高优先级、独立调度的任务),需要创建自定义工作队列。

    学习目的

    • 掌握自定义工作队列的创建与使用方法,能为驱动创建独立的工作队列。
    • 理解自定义工作队列的调度机制与优先级设置,避免任务被其他驱动阻塞。
    • 理解自定义工作队列与共享工作队列的区别,能根据场景选择合适的工作队列。

    学习内容

    • 自定义工作队列的创建:create_workqueue()/alloc_workqueue(),设置队列名称、标志、CPU 亲和性。
    • 自定义工作队列的 API:queue_work()、destroy_workqueue()。
    • workqueue_struct结构体解析:内核工作队列的核心结构体,包含工作线程、任务链表等信息。
    • 自定义工作队列的调度:任务会被提交到专属的内核线程执行,不会被其他驱动的任务阻塞。
    • 自定义工作队列的优缺点:优点是独立调度、优先级可控;缺点是会创建额外的内核线程,占用系统资源。

    一、工作队列的选择

    共享队列是操作系统内核统一管理的公共任务池,所有程序都可以使用这个共用的队列来处理任务。而自定义队列则是由操作系统或设备驱动专门创建的独立任务池,用来执行特定的定制化操作。

    简单来说:

    1. 共享队列:系统自带的公共任务通道,大家都可以用
    2. 自定义队列:专门定制的任务通道,为特定功能服务
      两者的主要区别在于:共享队列是系统级通用工具,自定义队列是针对具体需求设计的专用工具。

    二、自定义工作队列介绍

    2.1、工作队列相关结构体

    ① work_struct工作项:

    在 Linux 内核中,结构体 struct work_struct 描述的是要延迟执行的工作项,定义在include/linux/workqueue.h 当中,如下所示:

    struct work_struct{
        atomic_long_t data;
        struct list_head entry;
        work_func_t func;
        #ifdefCONFIG_LOCKDEP
            structlockdep_map lockdep_map;
        #endif
    };

    主要成员:

    • atomic_long_t data:存储工作项数据的字段,支持安全的多线程访问
    • struct list_head entry:工作项在队列中的链表节点,用于将工作项连接到队列中
    • work_func_t func:工作项执行时调用的处理函数

    ② workqueue_struct 工作队列

    这些工作组织成工作队列,内核使用 struct workqueue_struct 结构体描述一个工作队列,定义在 kernel/workqueue.c 当中,如下所示:

    /*
     * The externally visible workqueue.  It relays the issued work items to
     * the appropriate worker_pool through its pool_workqueues.
     */

    struct workqueue_struct{
        struct list_head        pwqs;/* WR: all pwqs of this wq */
        struct list_head        list;/* PR: list of all workqueues */

        struct mutex            mutex;/* protects this wq */
        int                     work_color;/* WQ: current work color */
        int                     flush_color;/* WQ: current flush color */
        atomic_t                nr_pwqs_to_flush;/* flush in progress */
        struct wq_flusher*first_flusher;/* WQ: first flusher */
        struct list_head        flusher_queue;/* WQ: flush waiters */
       struct list_head        flusher_overflow;/* WQ: flush overflow list */

    struct list_head        maydays;/* MD: pwqs requesting rescue */
    struct worker*rescuer;/* I: rescue worker */

    int                     nr_drainers;/* WQ: drain in progress */
    int                     saved_max_active;/* WQ: saved pwq max_active */

    struct workqueue_attrs*unbound_attrs;/* PW: only for unbound wqs */
    struct pool_workqueue*dfl_pwq;/* PW: only for unbound wqs */

    #ifdef CONFIG_SYSFS
    struct wq_device*wq_dev;/* I: for sysfs interface */
    #endif
    #ifdef CONFIG_LOCKDEP
    struct lockdep_map      lockdep_map;
    #endif
    char                    name[WQ_NAME_LEN];/* I: workqueue name */

    /*
             * Destruction of workqueue_struct is sched-RCU protected to allow
             * walking the workqueues list without grabbing wq_pool_mutex.
             * This is used to dump all workqueues from sysrq.
             */

    struct rcu_head         rcu;

    /* hot fields used during command issue, aligned to cacheline */
    unsignedint            flags ____cacheline_aligned;/* WQ: WQ_* flags */
    struct pool_workqueue __percpu *cpu_pwqs;/* I: per-cpu pwqs */
    struct pool_workqueue __rcu *numa_pwq_tbl[];/* PWR: unbound pwqs indexed by node */
    };

    2.2、工作队列相关接口函数

    include/linux/workqueue.h ----- API 声明位置

    2.2.1、关键API:创建与添加

    ① 创建工作队列

    create_workqueue(name)

    • 作用:创建一个工作队列,每个CPU都会对应一个独立的线程。
    • 参数:name 是队列的名字。
    • 返回值:成功返回队列的指针,失败返回NULL。

    create_singlethread_workqueue(name)

    • 作用:创建一个仅单线程的工作队列,不管有多少CPU,只创建一个线程。
    • 参数:name 是队列的名字。
    • 返回值:成功返回队列的指针,失败返回NULL。

    ② 将工作项添加到队列(源头queue_work_on)

    我们经常用的是queue_work。其实底层都是调用queue_work_on

    tatic inline bool queue_work(structworkqueue_struct*wq,
    structwork_struct*work)
    {
        returnqueue_work_on(WORK_CPU_UNBOUND, wq, work);
    }

    queue_work_on(cpu, wq, work)

    • 作用:把一个工作项立即放入指定CPU的队列,等待执行。
    • 参数:
      • cpu:目标CPU编号(如0表示第一个CPU)。
      • wq:目标队列的指针。
      • work:要执行的工作项(需提前初始化)。
    • 返回值:成功返回true,失败返回false。

    2.2.2、关键API:取消与清理

    ① 取消已调度的工作

    cancel_work_sync(work)

    • 作用:取消已放入队列但未执行的工作。
    • 如果工作正在执行:会等待它执行完毕再返回。
    • 参数:work 是要取消的工作项指针。
    • 返回值:成功返回true,失败返回false。

    ② 强制处理队列中的所有工作

    flush_workqueue(wq)

    • 作用:立即执行队列中所有未完成的工作,直到全部处理完毕。
    • 参数:wq 是要处理的队列指针。

    ③ 删除工作队列

    destroy_workqueue(wq)

    • 作用:释放队列资源(如内存和线程)。
    • 前提:必须确保队列中的所有工作已执行完毕(可通过flush_workqueue完成)。
    • 参数:wq 是要删除的队列指针。

    ④ 使用流程总结

    1. 创建队列:用create_workqueue或create_singlethread_workqueue。
    2. 添加工作:用queue_work_on将工作项放入队列。
    3. 取消工作:用cancel_work_sync终止未执行的工作。
    4. 清理队列:用flush_workqueue确保所有工作完成,再用destroy_workqueue删除队列。

    三、自定义共享队列案例

    #include <linux/module.h>
    #include <linux/init.h>
    #include <linux/interrupt.h>
    #include <linux/gpio.h>
    #include <linux/delay.h>
    #include <linux/workqueue.h>

    int irq;
    struct workqueue_struct*test_workqueue;
    struct work_struct test_workqueue_work;

    // 工作项处理函数
    void test_work(structwork_struct*work)
    {
        msleep(1000);
        printk("This is test_work\n");
    }

    // 中断处理函数
    irqreturn_ttest_interrupt(int irq,void*args)
    {
        printk("This is test_interrupt\n");
        //schedule_work(&test_workqueue);
        //提交一个任务 给 工作队列  
        //worker ---- 调度者
        queue_work(test_workqueue,&test_workqueue_work);// 提交工作项到工作队列
        returnIRQ_RETVAL(IRQ_HANDLED);
    }

    staticintinterrupt_irq_init(void)
    {
        int ret;
        irq =gpio_to_irq(104);// 将GPIO映射为中断号
        printk("irq is %d\n", irq);

        // 请求中断
                                 ret =request_irq(irq, test_interrupt, IRQF_TRIGGER_RISING,"test",NULL);
        if(ret <0)
        {
            printk("request_irq is error\n");
            return-1;
        }

        //test_workqueue   ---- workqueue_struct 
        //test_workqueue_work --- work_struct 
        //test_work  --- 函数
        test_workqueue_work=create_workqueue("test_workqueue");// 创建工作队列(比共享工作队列多的一行)
        INIT_WORK(&test_workqueue_work, test_work);// 初始化工作项

        return0;
    }

    staticvoidinterrupt_irq_exit(void)
    {
        free_irq(irq,NULL);// 释放中断
        cancel_work_sync(&test_workqueue_work);// 取消工作项
        flush_workqueue(test_workqueue);// 刷新工作队列
        destroy_workqueue(test_workqueue);// 销毁工作队列
        printk("bye bye\n");
    }

    module_init(interrupt_irq_init);
    module_exit(interrupt_irq_exit);

    MODULE_LICENSE("GPL");

    最新文章

    随机文章

    基本 文件 流程 错误 SQL 调试
    1. 请求信息 : 2026-08-21 15:32:43 HTTP/2.0 GET : https://f.mffb.com.cn/a/504122.html
    2. 运行时间 : 0.176006s [ 吞吐率:5.68req/s ] 内存消耗:4,831.09kb 文件加载:140
    3. 缓存信息 : 0 reads,0 writes
    4. 会话信息 : SESSION_ID=38cafc2a39dbecf483df4b55aecf67d6
    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.000439s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
    2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000553s ]
    3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.004312s ]
    4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.003865s ]
    5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000589s ]
    6. SELECT * FROM `set` [ RunTime:0.002395s ]
    7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000650s ]
    8. SELECT * FROM `article` WHERE `id` = 504122 LIMIT 1 [ RunTime:0.000920s ]
    9. UPDATE `article` SET `lasttime` = 1787297563 WHERE `id` = 504122 [ RunTime:0.004619s ]
    10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.001702s ]
    11. SELECT * FROM `article` WHERE `id` < 504122 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002144s ]
    12. SELECT * FROM `article` WHERE `id` > 504122 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000667s ]
    13. SELECT * FROM `article` WHERE `id` < 504122 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009791s ]
    14. SELECT * FROM `article` WHERE `id` < 504122 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.024120s ]
    15. SELECT * FROM `article` WHERE `id` < 504122 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007590s ]
    0.177483s