技术文章 Phil Eaton - databases
文章在 gosql 项目中扩展索引支持,涵盖 PRIMARY KEY 词法解析、红黑树索引创建、插入时索引维护和 SELECT 查询优化。作者使用 GoLLRB 红黑树存储索引项,通过识别 WHERE 条件中可应用索引的模式,先用索引预筛选行再执行过滤。文章分析当前查询计划仅支持 AND 连接和列与字面量比较,不能合并范围条件,且索引并非总是优于线性扫描。基准测试显示 100 万行插入时带索引内存和耗时增加,但等值查询从秒级降至微秒级,体现空间换时间的权衡。
推荐收录,因为文章通过写一个 Go 语言 SQL 数据库的索引模块,完整展示主键约束解析、红黑树索引构建、插入维护和查询预筛选的端到端实现,并给出有/无索引的实测性能对比。适合想理解数据库索引原理、查询规划和存储引擎实现的读者;其简化取舍与限制分析也可作为进一步阅读真实数据库文档与源码的入门桥梁。
技术文章 Daniel Lemire 2026/08/02
文章对 C++26 标准库新增容器 std::hive 进行了性能基准测试,并与 std::vector 和 std::list 在插入、遍历、删除和内存占用等方面进行对比。实验使用特定编译器、硬件和测试数据,测量了纳秒/元素、指令数和周期数。结果显示 hive 的插入成本约为 vector 的两倍,遍历速度与链表相当且远慢于 vector,主要因跳过字段和缺乏自动向量化;但在元素删除和内存占用上优于 list。作者指出 hive 不是更快的 vector,而是提供了稳定引用和常数时间删除的更好 list。该基准测试为 C++ 开发者在选择容器时提供了具体的性能参考,但结论受限于合成负载和单一硬件平台。
推荐收录,因为文章提供了针对 std::hive 的详细基准测试,用数据揭示了其与 vector 和 list 的性能差距和原因(如指令开销、缓存局部性、自动向量化影响),并给出了实际使用建议。适合 C++ 系统编程和性能优化场景的读者,可帮助他们在需要稳定引用与快速删除时做出容器选择,且评测方法论可迁移至其他数据结构的性能对比。
技术文章 知乎 - 严格鸽 2026/07/22
文章深入解析了NVIDIA cuCollections库中GPU哈希表static_map与dynamic_map的实现细节。static_map采用固定容量的开放寻址设计,默认以4个CUDA线程为一组(tile)协作插入或查找一个键,利用CAS原子操作解决并发写入冲突。文中详细说明了强类型哨兵、线性探测方案(ProbingScheme)、存储配置(Storage)等模板参数的作用,并结合代码剖析了插入和查找CUDA kernel的完整流程。dynamic_map通过维护多个static_map子表实现自动扩容,但旧数据不搬迁,导致查找需遍历所有子表,成本随扩容次数递增。整体上,文章为理解GPU上并发哈希表的协同设计与工程实现提供了清晰的代码级参考,适用于GPU加速数据库等场景,但缺乏性能评估与扩容策略的深入对比。
文章直接展示了GPU哈希表的线程协作、CAS并发控制等关键工程实现,代码解析深入,具备长期参考价值。适合CUDA开发者、数据库加速系统设计者理解GPU上数据结构的设计模式与约束。可迁移价值在于组合作、原子操作在并发容器中的实际应用,但需注意文中未给出性能基准,实际选型时还需自行测试。
工程实践 LWN.net 2026/07/15
文章介绍了 Linux 7.2 内核中 io_uring 子系统将工作项跟踪机制从标准链表替换为无锁多生产者单消费者(MPSC)队列的工程实践。作者逐步解释了无锁队列的设计原理,包括原子操作、内存顺序和使用场景,并展示了该变更带来的显著性能提升。文章还讨论了无锁算法在正确性与性能之间的权衡,以及该实现为何适用于 io_uring 的特定工作负载。内容聚焦于真实工程问题、具体实现取舍和可验证的效果,为理解内核并发优化提供了清晰的案例。
推荐收录,因为该文不仅报告了性能提升结果,更深入解析了无锁 MPSC 队列在内核中的具体设计和正确性保障,展示了从问题识别到算法选择、验证的全过程。对从事内核开发、高性能系统设计或对无锁编程感兴趣的读者有直接参考价值,其设计思路和分析方法可迁移至其他并发场景。
技术文章 知乎 - 木鸟杂记 2026/07/12
文章以“意象”和“隐喻”视角,将滑动窗口这一经典工程概念串联到TCP可靠传输(停等、GBN、SR协议)、LeetCode字符串处理(无重复最长子串、最小覆盖子串)、Raft共识算法(同步窗口与应用窗口)以及流式数据调度等多个计算机领域。作者以个人学习与工作经历为线索,逐步揭示滑动窗口的核心结构:序号机制、有限视图和单调移动,并强调其“以有限应对无限”的设计哲学。文中对每个场景的推导过程、关键细节和工程取舍均有说明,尤其点出双指针维护窗口、计数器表达视图等共通技巧。文章偏向概念梳理与跨领域类比,未深入单一实现细节或性能边界,更适合建立全局直觉而非直接作为实现手册。
推荐收录,因为文章将滑动窗口从具体协议和算法中提炼为可迁移的工程隐喻,以生动案例串联多个计算机子领域,能帮助读者建立跨层次的系统思维。适合对分布式系统、算法设计或计算机网络感兴趣的学习者,文中总结的“序号+窗口+滑动”模式可直接迁移至数据管道、状态同步等工程场景。
工程实践 MaskRay 2026/06/27
这篇文章围绕 LLVM SmallVector 的 push_back 热路径优化展开,分析了约 trivially copyable 元素在容量不足时为何会把本应只发生在慢路径的状态保存,意外带到快路径上。作者通过 clang、GCC 和不同库实现的汇编对比指出,fast/slow 合流会迫使 this 和元素值占用被调用者保存寄存器,shrink wrapping 无法消除这些开销。随后提出把 grow-and-store 拆成独立的尾调用慢路径,让快路径只保留一次比较、一次存储和一次递增,从而显著缩短指令序列并减少寄存器压力。文章还验证了 libc++、libstdc++、Boost small_vector 的类似问题,并说明这个改动对二进制体积、编译时指令数和少数内联阈值敏感点的影响。其边界在于慢路径会更慢且 noinline 很关键,但由于扩容本就要搬移元素,额外一次调用的代价通常可接受。
收录依据很明确:文章给出了汇编、shrink-wrap 诊断和编译时统计,证明问题出在快慢路径合流导致的寄存器溢出,而非简单的代码风格差异。适合做 C++ 标准库、LLVM/编译器后端和性能优化的参考,尤其对需要理解尾调用、内联与寄存器分配权衡的读者可迁移价值很高。