- 博客(39)
- 收藏
- 关注
原创 深入理解 Rust 的静态分发与动态分发:从 `impl Trait` 到 `dyn Trait`
impl Trait是 Rust静态安全与高性能的基石,它让泛型变得好写、好读。dyn Trait则是 Rust灵活性的出口,它在严格的所有权体系下,为面向对象风格的多态留出了一扇窗。如果你确定这一刻只需要一种类型,用impl;如果你需要把不同的东西装进同一个袋子,用dyn。
2026-04-14 09:31:59
344
原创 深入浅出 Rust 内存顺序:从 CPU 重排到 Atomic Ordering
默认不是 SeqCst:虽然它最安全,但为了极致性能,你应该优先考虑。配对出现Release必须对应Acquire才有意义。不要过度重写:如果你在写业务逻辑,通常应该使用Mutex或Arc,它们内部已经帮你处理好了这些复杂的 Ordering。只有在实现底层无锁数据结构时,才需要深入原子顺序。
2026-04-03 10:04:55
213
原创 深入浅出 Rust RefCell:打破静态检查的“紧箍咒”
在 Rust 的世界里,借用检查器(Borrow Checker)像是一位严厉的判官,在编译期就杜绝了内存安全隐患。然而,这种严苛有时会变成灵活性上的桎梏。当你陷入“明明逻辑安全,却无法通过编译”的困境时,RefCell<T>便是那把开启禁忌之门的钥匙。
2026-04-02 09:14:13
290
原创 彻底搞懂 Rust 高性能并发利器:ArcSwap
arc-swap是一种无锁(Lock-Free)或低锁的数据结构,专门用于“读极多、写极少”的场景。它的核心思想类似于读操作:极其快速,几乎等同于一次原子的指针读取。写操作:通过替换底层指针来实现更新,不会阻塞现有的读取者。arc-swap是 Rust 并发工具箱里的一把“手术刀”,精准解决高并发下的读性能瓶颈。如果你正在构建一个高性能网络服务,且苦于RwLock带来的延迟波动,切换到arc-swap通常能带来立竿见影的提升。
2026-03-26 15:10:09
250
原创 告别 lazy_static:深度解析 Rust OnceCell 的前世今生与实战
工具适用场景状态单线程、结构体字段延迟初始化推荐 (Std)多线程、全局静态变量推荐 (Std)需要类似的声明式写法推荐 (Crate)旧项目维护不建议新项目使用除非你需要Lazy的语法糖或者要兼容极旧的编译器版本,否则请全面拥向。附:为什么其他语言比如C++ GOlang 不需要OnceCell就可以解决全局变量的这个使用场景特性C++GoRust初始化保证靠程序员自觉 / 局部静态变量Runtime 在 main 前自动执行编译阶段严格拦截线程安全检查。
2026-03-19 16:19:36
469
原创 Rust 跨平台编译实战:从手动配置到 Cross 容器化
交叉编译(Cross-Compilation)是指在**架构 A(宿主机 Host)上,生成运行在架构 B(目标机 Target)**上的程序。编译器后端支持:Rustc 本身支持多种后端架构。目标平台的标准库:例如 Linux 的std库。链接器与 C 工具链:这是最难搞的部分。即使你的 Rust 代码很纯净,但只要你依赖了 libc 或任何 C 库(如rdkafkaopenssl),就必须有目标平台的 C 链接器和头文件。清理旧工具:如果以前用 brew 装过交叉编译链,建议掉,避免PATH。
2026-03-16 22:43:29
444
原创 深入浅出 Rust FFI:从内存安全到二进制兼容
调用 C/C++ 库时,你实际上走出了 Rust 编译器的安全保护区。Rust 编译器可以自由调整字段布局,以获得更好的性能或更小的内存占用。,系统讲解 Rust FFI 的核心设计原则。这样 panic 就不会越过 FFI 边界。,即使代码能够编译,运行时也可能读取到。Rust 与 C 才能安全共享该结构体。Rust 和 C 的字符串模型完全不同。Rust 默认不会保证结构体字段顺序。但当 Rust 通过。不要在业务代码中直接使用 FFI。FFI 的核心不是语法,而是。
2026-03-16 14:11:18
438
原创 向量数据库学习笔记
比如在坐标系中,“猫”和“狗”的坐标可能紧挨着,而“扳手”则在很远的地方。比如在坐标系中,“猫”和“狗”的坐标可能紧挨着,而“扳手”则在很远的地方。Embedding的原理是什么,比如狗狗,要分成几个向量,向量值是什么,依据是什么?Embedding的原理是什么,比如狗狗,要分成几个维度,维度值是什么,依据是什么?Embedding的原理是什么,比如狗狗,要分成几个向量,向量值是什么,依据是什么?Embedding的原理是什么,比如狗狗,要分成几个维度,维度值是什么,依据是什么?
2026-03-05 10:53:24
372
原创 JSON 序列化性能差异原理分析: RUST VS Go
数据的“规模效应”:JSON 性能并非线性。小包看代码生成效率,大包看内存管理水平。反射的边界:Go 反射在处理嵌套 Map 和 Slice 时是性能黑洞。如果业务涉及大规模 Header 处理,必须规避标准库。语言特性红利:Rust 的性能优势不仅来自语言本身,更来自 LLVM 对单态化代码的极致优化(如指令重排和向量化)。
2026-03-04 14:30:30
434
原创 深入浅出 Rust Cow:在“写时复制”中追求极致性能
Rust 的Cow完美体现了“按需分配”的思想。它通过生命周期和枚举,在底层实现了极其灵活的内存策略。在性能敏感的应用中,合理使用Cow往往是减少 CPU 和内存占用的关键招式。
2026-03-03 15:52:34
923
原创 Rust tokio:系统为什么会被自己拖死:Tokio 中的流控与反压设计
永远不要使用无界队列:在生产环境中,这等同于自杀。显示设置超时:任何.await都要考虑如果对方不响应怎么办(见第六篇)。识别瓶颈点:通过监控任务队列的长度。尽早拒绝:在系统的入口处(如 Load Balancer 或中间件)进行限流,比在系统内部崩溃要好得多。异步不是为了跑得更快,而是为了在重压之下依然保持有序。
2026-02-28 11:39:45
894
原创 Work-Stealing 的边界:Tokio 多线程调度器何时失效
Work-Stealing 的本质是“事后补偿”,它试图修复已经发生的负载不均。但最优秀的异步系统应该通过“事前预防”来保持平衡。不要阻塞 Worker:这是调度器失效的第一号杀手。理解缓存局部性:利用 LIFO Slot,但警惕它带来的不公平性。监控是唯一真理:使用观察或。
2026-02-26 09:40:16
389
原创 Rust tokio:时间也是负载:当你的系统同时维护十万个定时器
内存非免费:每一个timeout都是一个内存节点,注意生命周期捕获。唤醒有代价:避免“整点触发”,利用Jitter削峰填谷。行为要明确:了解Interval的追赶机制,选择最适合业务的。
2026-02-25 09:47:48
662
原创 消息不是免费的 —— Channel 背后的成本真相
不要把 Channel 看作一个简单的“数组”。在 Tokio 的视角下,它是一个复杂的同步协调器。发出的每一条消息,都在消耗 CPU 周期进行状态维护。每一次.await,都在增加潜在的调度延迟。一句话准则:在设计系统时,应尽量减少跨 Task 的消息传递。如果能在一个 Task 内通过局部引用解决,就不要引入 Channel。
2026-02-12 15:48:42
733
原创 Rust tokio:谁在驱动你的 Future?从 Poll 到 Wake 的执行闭环
异步驱动本质上是一条流动的河流。Runtime 是河水(动力),Future 是水车(任务)。Poll是河水推了一次水车。Pending是水车告诉河水:“我现在的角度接不到力,你先去推别人吧”。Wake是水车转到了正确位置,打个招呼让河水再回来。任何同步的sleep、死循环或阻塞式锁,都像是在河道里筑起的大坝。一旦大坝截断了水流,整个闭环就会崩溃。在异步世界,请务必保持“协作”,在等待时主动交出控制权。
2026-02-09 14:03:42
401
原创 Rust tokio:Task ≠ Thread:Tokio 调度模型中的“假并发”与真实代价
Tokio 承诺:给你极致的单机并发能力,单机支撑百万 Task 不是梦。你必须承诺:绝不阻塞,永远在.await处优雅地让座。如果你破坏了规则,Task 就不再是“轻量级线程”,而是系统崩溃的“导火索”。
2026-02-05 16:16:27
606
原创 深度剖析:当 Tokio 接管执行权的那一刻,底层发生了什么?
身份转变:你的主线程从“逻辑执行者”变成了“资源调度员”。代码重构:你的逻辑从“指令流”变成了“状态机组合”。时间解耦:代码的执行不再取决于 CPU 的快慢,而取决于外部 I/O 信号的反馈。Tokio Runtime 并不是帮你并发执行代码,而是接管了你对“何时执行代码”的所有决定权。
2026-02-05 09:11:41
660
原创 Rust Cell使用与原理
类型线程安全借用方式适用场景性能开销Cell<T>否按值 (Copy)简单标量、标志位极低(零成本)RefCell<T>否引用 (borrow)复杂结构、单线程逻辑变动中等(运行时计数)否一次性初始化延迟加载、单例极低是引用 (lock)多线程并发修改高(系统调用/上下文切换)
2026-01-29 14:59:07
768
原创 Rust 错误处理的工程化演进:从 Result 到系统级边界设计
本文深入探讨Rust在高并发系统中的错误处理机制,提出从数据源头到分层架构的系统级解决方案。通过分析Result类型的哲学基础与底层实现,揭示其零成本抽象特性;针对工程实践中的样板代码问题,介绍thiserror宏的自动化优势;并给出错误链处理、透明转发等进阶技巧。最后提出分层模型设计规范,强调模块边界语义收敛的重要性,同时规范anyhow的使用场景。整体方案将系统稳定性从开发者自律转化为编译器约束,实现开发便捷性与系统可观测性的统一。
2026-01-23 15:00:36
575
1
原创 Rust Print 终极指南:从底层原理到全场景实战
在你的 LogChain 项目中,你可能希望直接打印结构体,并自动脱敏。id: u64,// 自定义输出逻辑:只显示前3位,其余星号遮掩write!// 现在可以直接用 {} 打印了// println!需求语法原理点快速调试{:?依靠DebugTrait 自动生成结构化展示{:#?检查标志位实现缩进日志对齐动态宽度控制,不涉及堆内存分配生产日志eprintln!()输出到 stderr,避开普通业务数据流极致性能避免内核级 Mutex 的频繁上下文切换。
2026-01-20 11:12:09
644
原创 Rust Enum:从样板代码到极致精简的演进
从手写match一致性:所有枚举的转换行为完全统一,不会出现“这个枚举叫小写,那个枚举叫大写”的问题。健壮性:宏生成的代码经过社区验证,避免了手动实现时可能出现的逻辑遗漏。自解释:看到派生列表,开发者能立刻明白该枚举具备哪些能力。
2026-01-15 15:55:57
346
原创 Rust 工程实战:深度解析 Serde 反序列化默认值与优先级逻辑
default理解优先级逻辑是精通 Serde 的必经之路。请牢记:字段属性(P1/P2)是排他性的,一旦显式声明,容器级的默认值(P3)将不再生效。在工程实践中,推荐优先使用“容器级默认值”来保持代码的整洁和初始值的一致性。
2026-01-15 09:45:51
527
原创 深入浅出 DashMap:Rust 高并发场景下的“性能怪兽”
场景推荐方案原因单线程或简单共享HashMap逻辑简单,开销小。写极少,读海量分段锁的维护开销可能超过其收益。高并发读写平衡DashMap分段锁能显著减少多核环境下的锁竞争。一句话总结:DashMap 是一把手术刀,它通过分段锁和 RAII 机制,在保证内存安全的同时榨干了多核 CPU 的性能。通过 if let 紧凑管理生命周期,是发挥其威力的正确姿势。
2026-01-14 20:00:27
699
原创 深度解构 Rust 引用转换:从痛点到内存真相
AsRef的设计初衷是参数多态化(Normalization)。设计思考:如果不用 Trait,你需要为StringstrPathBuf写三个函数。AsRef<T>允许函数接收任何能产生&T的类型。底层开销:它是零成本的。以String转Path为例,底层只是将指针类型的重新解释(Reinterpret),内存布局完全不动。Java 或 Go 隐藏了指针,对象通常本身就是引用,没有所有权丢失的困扰。内存布局明确String(堆)、str(切片)、Option(栈上的枚举)分得清清楚楚。零开销抽象。
2026-01-05 09:58:29
584
原创 揭秘 Rust 的“隐身魔法”:自动解引用、强制转换与隐式借用
初学者常觉得这违反了 Rust “不隐式转换”的原则。但从设计哲学上看,这是严谨与实用安全防线(显式):涉及内存所有权转移(Move)或高开销内存拷贝(Clone)的操作必须显式。这保证了程序的性能边界是清晰的。体验优化(隐式):在引用之间的层级转换(Deref/Autoref)是安全且零成本的。Rust 自动处理这些繁琐的包装,是为了让你专注于业务逻辑,而不是在“星号汤”(&***ptr)中挣扎。Rust 只在不影响内存安全和性能预期的前提下,才为你提供这种“魔法”便利。
2026-01-04 17:14:29
842
原创 探秘分布式共识:从理论到实践的演进
分布式系统的核心挑战之一是确保在面对节点故障、网络延迟和消息丢失等不确定性时,所有参与者能就某个状态或操作序列达成一致。这便是的基石,也是现代高可用、一致性服务能够运行的基础。
2025-07-03 11:57:27
707
原创 无锁消费队列的实现方式
• 循环缓冲区(Ring Buffer):使用一个固定大小的数组作为队列,每个线程维护一个读指针和写指针,通过原子操作来保证读写指针的更新是线程安全的。生产者向队列写数据,消费者从队列读取数据。• Michael-Scott Queue:该队列通过一个双端队列(deque)实现,其中生产者总是向队列的尾部插入元素,消费者总是从队列的头部移除元素。在高并发环境下,无锁队列可以有效降低线程竞争、减少上下文切换,从而提升系统的吞吐量和响应速度,但它们的实现通常比锁机制复杂,且在极端竞争条件下可能导致性能下降。
2025-02-20 12:02:37
802
原创 Rust derive 宏与java注解的异同
特性Rustderive宏Java 注解执行时机编译时,代码生成编译时或运行时(通过反射或工具)对性能的影响无运行时开销,完全在编译时展开可能会有运行时开销,特别是反射操作灵活性通过proc-macro扩展,生成代码自动化主要依赖框架来处理,灵活性取决于框架的设计用途自动实现常用 trait(如DebugCloneSerialize提供元数据、用于框架中(如 DI、ORM、AOP 等)依赖性无需框架支持常与框架结合使用(如 Spring、Hibernate)总结来说,Rust 的derive。
2025-02-19 14:40:53
782
原创 使用 Rust OnceLock 实现高效的单次初始化
OnceLock是 Rust 提供的一个非常高效且易于使用的工具,它帮助我们在多线程环境中实现了惰性初始化。它的线程安全性和简洁的 API,使得在需要保证某些资源只初始化一次的场景中非常适用。通过合理使用OnceLock,我们可以避免重复计算和初始化的开销,提高程序的性能和可维护性。
2024-12-25 09:53:27
1286
原创 C++ Lambda表达式:从历史渊源到现代编程的利器
C++的Lambda表达式无疑是现代C++编程中一个非常重要且有用的特性。它不仅能够简化函数对象的创建,使得代码更加简洁高效,还能通过捕获外部变量增强代码的灵活性。然而,Lambda表达式的使用也伴随了一些理解上的误区和潜在的性能开销,因此,合理且恰当的使用Lambda能够让C++编程更加清晰、简洁,同时不影响性能。随着C++语言的不断发展,Lambda表达式的功能也在持续扩展,它已经成为了C++开发者不可或缺的工具之一。
2024-11-14 11:32:19
841
原创 系统稳定性建设
系统稳定性建设是一项持续的、系统化的工作,需要从架构设计、自动化监控、容错机制、灾备演练到团队协作多维度入手。各团队需建立成熟的稳定性文化,定期进行优化和演练,通过技术手段和制度保障,提高系统的健壮性和可维护性。
2024-11-13 11:31:33
1579
原创 还在为c++依赖库烦恼:使用conan!
在C++开发中,依赖管理一直一个难题,对于新入手的项目,往往花大量的时间的在搭建编译环境,解决依赖等问题上。即便对于一个成熟的项目,开发新feature时新引入的依赖,升级依赖库等也是一件较为繁琐的申请。我曾见过一些夸张的项目,由于依赖过多,管理又乱,只能在某些编译机上编译通过,重新搭建一个新的编译环境甚至需要几天甚至一周的时间。本文介绍一种用的比较的包管理的依赖器 Conan。
2024-10-29 11:01:52
1228
原创 程序性能优化思考与总结
在有限的资源约束下,提升程序的响应时间 (RT)、吞吐量 (Throughput) 和并发量 (Concurrency) 的行为。性能优化有两个核心概念:时间维度和空间维度。
2024-10-01 22:44:01
708
原创 基于敏感词过滤的反垃圾过滤系统
当前的项目已经开源,点击这里内容安全是当前安全风控体系健身中非常重要的一环。一方面,无论是小程序还是APP,在上架过程中面临很多监管的要求,这一环搞不好就要面临下架的风险,另一方面,关键词屏蔽本身就是业务需求的一部分,比如屏蔽某个竞对的外链等。市面上已经很多大的云厂商和一些专门做风控领域的厂商提供这方面的服务,但主要存在以下的痛点:考虑到各种乙方使用者的通用性,无论是API设计和control platform都存在大量冗余的设计;导致一个原本非常简单的场景在付出很大的接入和维护成本;当面临一些个
2021-10-19 17:17:40
451
原创 基于DFA算法的敏感词过滤的go语言实现
基于DFA算法的敏感词过滤的go语言实现DFA算法简介;实现代码;Github链接;基于DFA算法做的一个开箱即用的敏感词过滤服务,可查看 代码的github链接在敏感词过滤的场景中,经常用到是DFA算法,至于为什么使用DFA算法,可自行百度。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyOjySQo-1631524019540)(https://programmer.help/images/blog/b636114c8f6718cfa937b172a9e
2021-09-13 17:10:49
2110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅