当前位置: 首页 > news >正文

那些不应该的优化

看到遍历就不舒服,奈何还知道空间换时间,并且屡次从 “给结构体加字段而大幅度优化程序运行性能” 这种事里拿到不少甜头,就会形成条件反射,看到循环遍历就想优化。

Linux 内核 Hash 链表有一个陈年接口,它的 add_tail 竟然还要遍历:

static inline void hlist_add_tail_rcu(struct hlist_node *n,struct hlist_head *h)
{struct hlist_node *i, *last = NULL;/* Note: write side code, so rcu accessors are not needed. */for (i = h->first; i; i = i->next)last = i;if (last) {n->next = last->next;WRITE_ONCE(n->pprev, &last->next);rcu_assign_pointer(hlist_next_rcu(last), n);} else {hlist_add_head_rcu(n, h);}
}

上面的这个接口实现很容易被信手 “优化”:

struct hlist_head {struct hlist_node *first;// 增加一个 last 字段,记录锚点struct hlist_node *last;
};
static inline void hlist_add_tail_rcu(struct hlist_node *n,struct hlist_head *h)
{if (h->last) {n->next = h->last->next;WRITE_ONCE(n->pprev, &h->last->next);rcu_assign_pointer(hlist_next_rcu(h->last), n);} else {hlist_add_head_rcu(n, h);}h->last = n;
}

遍历没有了,代价是每个 hlist_head 增加一个 8 字节字段,1000 个就要消耗 8KB 的空间,但这说服不了谁,没人在乎那 8KB,就算 80MB 又如何。

但以上的修改却节省不了多少时间。

hlist 就是冲 Hash 的 O(1) 去的,正常情况下它一定很短,如果太长了,要么 Hash 函数不良,要么 Hash bucket 太少,首要解决 Hash 冲突问题,而不是遍历冲突链表的问题。

所以 hlist_add_tail_rcu 很好,无需优化。

这涉及到解决问题的思路问题,你是盯着问题还是盯着方法,还是让问题消失,下图就是一个例子:
在这里插入图片描述

浙江温州皮鞋湿,下雨进水不会胖。

http://www.lqws.cn/news/539371.html

相关文章:

  • html配置rem实现页面自适应
  • Linux:从后往前查看日志命令
  • 编译原理---文法和语法分析
  • 基于全局构建版本和ES模块构建版本的vue3 快速上手
  • LLM驱动开发:正在重塑软件工程的下一场革命
  • Maven生命周期与阶段扩展深度解析
  • GO 语言学习 之 语句块
  • vscode把less文件生成css文件配置,设置生成自定义文件名称和路径
  • FlutterPackages中的animations库升级适配Flutter3.27
  • Ubuntu18.04/Mysql 5.7 建立主备模式Mysql集群
  • 华为云Flexus+DeepSeek征文|Dify平台开发搭建口腔牙科24小时在线问诊系统(AI知识库系统)
  • C++学习笔记
  • 16.3 Docker生产级部署:网络与存储高效配置实战,保障99.95%可用性
  • 387. 字符串中的第一个唯一字符
  • uni-app uts 插件 android 端 科大讯飞离线语音合成最新版
  • 修改表中满足特定条件的字段值
  • elementUI轮播图组件el-carousel适配移动端大小(图片加载好后根据大小适配)
  • 抽样分布与参数估计细节
  • 如何在安卓设备上发送长视频:6 种可行的解决方案
  • GitHub Actions与AWS OIDC实现安全的ECR/ECS自动化部署
  • 从输入到路径:AI赋能的地图语义解析与可视化探索之旅
  • 远程办公与协作新趋势:从远程桌面、VDI到边缘计算,打造高效、安全的混合办公环境
  • Java底层原理:深入理解JVM内存模型与线程安全
  • 开发数字化绿色低碳园区系统:分阶段实施指南
  • 数据获取
  • word中如何保存高清图片,并保存为高质量的pdf文件(图像不失真)
  • 【Linux】基础开发工具(2)
  • 架构轻巧的kokoro 文本转语音模型
  • LeetCode 2302.统计得分小于K的子数组数目
  • Docker 入门教程(二):Docker 的基本原理