当前位置:首页>Linux>嵌入式Linux--Linux并发与竞争实验

嵌入式Linux--Linux并发与竞争实验

  • 2026-04-16 03:39:19
嵌入式Linux--Linux并发与竞争实验
Linux并发与竞争实验,原子操作实现 LED 互斥访问的核心逻辑,并给出完整、规范、可直接用于开发的代码模板,同时补充其余三种并发控制机制的核心差异。
一、原子操作实验核心逻辑
原子操作的本质,是让变量的读写操作“不可被打断”,本实验用一个值为 1的原子变量当“设备使用许可证”。
应用想操作 LED,必须先尝试把许可证从 1减成 0(只有能减成功,才算拿到许可证)。
如果此时许可证已经是 0,说明其他应用正在用,本应用拿不到,直接报错。
应用用完后,再把许可证从 0加回 1,让出设备控制权。
这种机制保证同一时刻只有一个应用能操作 LED,实现互斥。
二、完整开发代码模板
以下代码是可直接用于开发的规范版本,分为驱动(atomic.c)和测试应用(atomicApp.c)两部分。
1. 驱动代码(atomic.c)
#include<linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/atomic.h>
#defineGPIOLED_CNT 1 // 设备号数量:1个LED对应1个设备
#defineGPIOLED_NAME "gpioled"// 设备名
#define LED_OFF 0
#define LED_ON 1// LED设备结构体
structgpioled_dev {dev_t devid; // 设备号
struct cdev cdev; // 字符设备结构体
struct class *class; // 设备类
struct device *device;// 设备实例int major;
// 主设备号
int minor; // 次设备号
struct device_node *nd; // 设备树节点int led_gpio; // LED对应GPIO编号atomic_tlock; // 原子变量:作为设备互斥锁(初始值=1)
};
static struct gpioled_dev gpioled;// 打开设备:尝试获取设备控制权
static int led_open(struct inode *inode, struct file *filp) {
// 原子减1,判断是否能成功拿到锁(许可证)// 如果减1后结果是0,返回true;否则返回false(说明已被占用)
if(!atomic_dec_and_test(&gpioled.lock)) {
// 拿不到锁,把锁加回1,保持原样,返回“忙”
atomic_inc(&gpioled.lock);return -EBUSY;}
// 拿到锁,设置文件私有数据为设备结构体(方便后续操作访问)
filp->private_data = &gpioled;return 0;}
// 从设备读数据(本实验读操作仅确认状态,不做实质功能)
static ssize_t led_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt) {return 0;}
// 向设备写数据:控制LED亮灭
static ssize_t led_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offt) {
int ret;unsigned char user_cmd;struct gpioled_dev *dev = filp->private_data;
// 把用户态数据拷贝到内核态
ret = copy_from_user(&user_cmd, buf, cnt);if (ret <0) {return -EFAULT;}// 根据指令控制
LED GPIOif (user_cmd == LED_ON) {
gpio_set_value(dev->led_gpio, 0); // 假设GPIO拉低点亮LED
} else if (user_cmd == LED_OFF) {
gpio_set_value(dev->led_gpio, 1); // 假设GPIO拉高熄灭LED
}return 0;}
// 关闭设备:释放设备控制权
static int led_release(struct inode *inode, struct file *filp) {
struct gpioled_dev *dev = filp->private_data;// 把锁从0加回1,释放设备
atomic_inc(&dev->lock);return 0;}// 设备操作函数集合
static struct file_operations gpioled_fops = {.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_release,};// 驱动初始化函数
static int __init led_init(void) {int ret = 0;// 初始化原子变量,初始值为1(表示设备空闲)
atomic_set(&gpioled.lock, 1);// 从设备树获取LED节点
gpioled.nd = of_find_node_by_path("/gpioled");
if (!gpioled.nd) {printk(KERN_ERR "gpioled node not found!\n");
return -ENODEV;}
printk(KERN_INFO "gpioled node found!\n");// 获取设备树中led-gpio属性的GPIO编号
gpioled.led_gpio = of_get_named_gpio(gpioled.nd, "led-gpio", 0);
if (gpioled.led_gpio <0) {
printk(KERN_ERR "get led-gpio failed!\n");
return -EINVAL;}// 申请GPIO并设置为输出模式
ret = gpio_request(gpioled.led_gpio, "led_gpio");
if (ret) {
printk(KERN_ERR "gpio request failed!\n");return ret;}
gpio_direction_output(gpioled.led_gpio, 1); // 初始熄灭LED// 分配主设备号(动态分配)
ret = alloc_chrdev_region(&gpioled.devid, 0, GPIOLED_CNT, GPIOLED_NAME);
if (ret <0) {printk(KERN_ERR "alloc_chrdev_region failed!\n");goto err_gpio_free;}
gpioled.major = MAJOR(gpioled.devid);gpioled.minor = MINOR(gpioled.devid);
// 初始化cdev
cdev_init(&gpioled.cdev, &gpioled_fops);gpioled.cdev.owner = THIS_MODULE;// 添加cdev到系统
ret = cdev_add(&gpioled.cdev, gpioled.devid, GPIOLED_CNT);if (ret <0) {printk(KERN_ERR "cdev_add failed!\n");goto err_unreg_region;}
// 创建设备类
gpioled.class = class_create(THIS_MODULE, GPIOLED_NAME);
if (IS_ERR(gpioled.class)) {ret = PTR_ERR(gpioled.class);printk(KERN_ERR "class_create failed!\n");goto err_cdev_del;}// 创建设备节点(自动生成 /dev/gpioled)
gpioled.device = device_create(gpioled.class,NULL,MKDEV(gpioled.major, gpioled.minor),NULL, GPIOLED_NAME);if (IS_ERR(gpioled.device)) {
ret = PTR_ERR(gpioled.device);printk(KERN_ERR "device_create failed!\n");goto err_class_del;}printk(KERN_INFO "atomic driver init success!\n");
return 0;
// 错误处理:逆序释放资源err_class_del:class_destroy(gpioled.class);
err_cdev_del:cdev_del(&gpioled.cdev);
err_unreg_region:unregister_chrdev_region(gpioled.devid, GPIOLED_CNT);
err_gpio_free:gpio_free(gpioled.led_gpio);return ret;}// 驱动卸载函数
static void __exit led_exit(void) {// 逆序释放所有资源
device_destroy(gpioled.class, MKDEV(gpioled.major, gpioled.minor));
class_destroy(gpioled.class);
cdev_del(&gpioled.cdev);unregister_chrdev_region(gpioled.devid, GPIOLED_CNT);
gpio_free(gpioled.led_gpio);printk(KERN_INFO "atomic driver exit!\n");}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zuozhongkai");
MODULE_INFO("version", "1.0");
2. 测试应用代码(atomicApp.c)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>// 用法提示
static void usage(char *argv[]) {
printf("Usage: %s <cmd>rn", "1:openLED", "0: close LED");
printf("%s 0 /dev/gpioled\n", argv[0]);printf("%s 1 /dev/gpioled\n", argv[0]);}
int main(int argc, char *argv[]) {
if (argc != 3) {usage(argv);return -1;}
// 打开设备文件
int fd = open(argv[2], O_RDWR);if (fd <0) {
perror("open device failed!");return -1;}// 获取用户输入的控制指令(亮/灭)
unsigned charcmd = atoi(argv[1]);int ret = write(fd, &cmd, 1); // 向驱动写入指令
if (ret <0) {perror("write failed!");close(fd);return -1;}// 模拟应用占用设备25秒(5次睡眠,每次5秒)
int cnt = 0;while (1) {sleep(5);cnt++;printf("App running times: %d\n", cnt);
if (cnt >= 5) break;}// 关闭设备文件(释放驱动的原子锁)
close(fd);
return 0;}
3. 配套Makefile文件
指定内核源码路径(需替换为你实际的内核路径)KERNELDIR := /home/zuozhongkai/linux/IMX6ULL/linux/temp/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
当前模块名(和驱动源文件名 atomic.c 对应)obj-m := atomic.o
当前路径CURRENT_PATH := $(shell pwd)all:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modulesclean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
三、其余三种并发控制机制的核心差异。
除了原子操作,还有自旋锁、信号量、互斥体三种常用并发控制机制,它们各有适用场景,核心区别如下:
1. 自旋锁(spinlock)
工作方式:如果申请不到锁,内核会在原地“忙等待”,不停循环检查锁是否被释放,直到拿到锁为止,期间不会睡眠、不会让出CPU。
适用场景:临界区代码执行时间极短(比如几行代码,微秒级别),且只能用于非中断上下文(比如进程上下文)。
优点:开销极小,不需要切换上下文,拿到锁的速度最快。
缺点:如果临界区时间长,CPU会被一直占用,浪费资源;且不能用于中断上下文(中断中忙等待会导致系统死锁)。
2. 信号量(semaphore)
工作方式:如果申请不到锁,内核会让当前进程进入睡眠状态,把进程挂到等待队列上,等锁被释放时,再由持有锁的进程唤醒等待的进程。
适用场景:临界区代码执行时间较长(比如秒级),允许进程睡眠,既可用于进程上下文,也可用于中断上下文(需特殊处理)。
优点:不会占用CPU空转,适合处理长时间任务,让CPU去做其他事。
缺点:有睡眠开销,申请和释放锁的速度比自旋锁慢;资源占用比互斥体略高。
3. 互斥体(mutex)
工作方式:本质是一种特殊的二值信号量(初始值为1),专门用于实现进程间互斥。申请不到锁时,进程会睡眠等待,锁释放后自动唤醒。
适用场景:主要用于进程之间的互斥访问,对访问顺序有严格要求(谁拿到锁谁用,严格互斥)。
优点:比信号量更轻量、高效,代码可读性更好;系统提供了严格的错误检查,避免误用(比如重复加锁、解锁未加锁的互斥体等)。
缺点:只能用于进程上下文,不能用于中断上下文(因为涉及到睡眠和唤醒,中断中不能睡眠);也不能实现资源计数(只能控制单一资源互斥,不像信号量可以控制多个同类资源)。
四、四者核心对比
机制
核心特点
睡眠行为
适用场景
原子操作
针对变量,操作绝对不可打断
不睡眠
变量级保护,简单互斥
自旋锁
忙等待,死磕不放
不睡眠
极短临界区,非中断上下文
信号量
睡眠等待,支持多资源计数
申请不到则睡眠7
长时间临界区,资源计数场景
互斥体
专用互斥工具,严格二值控制
申请不到则睡眠
进程间单一资源互斥,高效安全
简言之:
变量级简单保护选原子操作;
短任务、不能睡眠选自旋锁;
长任务、需要睡眠选信号量或互斥体;
纯进程互斥、追求安全高效优先选互斥体。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-16 12:15:09 HTTP/2.0 GET : https://f.mffb.com.cn/a/485769.html
  2. 运行时间 : 0.074376s [ 吞吐率:13.45req/s ] 内存消耗:4,500.84kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0eeb8d5ed5e7148806797a565aaef834
  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.000310s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000710s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000354s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000275s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000627s ]
  6. SELECT * FROM `set` [ RunTime:0.000268s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000713s ]
  8. SELECT * FROM `article` WHERE `id` = 485769 LIMIT 1 [ RunTime:0.000510s ]
  9. UPDATE `article` SET `lasttime` = 1776312909 WHERE `id` = 485769 [ RunTime:0.000564s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000241s ]
  11. SELECT * FROM `article` WHERE `id` < 485769 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001127s ]
  12. SELECT * FROM `article` WHERE `id` > 485769 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000406s ]
  13. SELECT * FROM `article` WHERE `id` < 485769 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001902s ]
  14. SELECT * FROM `article` WHERE `id` < 485769 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001165s ]
  15. SELECT * FROM `article` WHERE `id` < 485769 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000771s ]
0.075994s