Mkdir700's Note

Mkdir700's Note

最新文章

Tokio:为什么异步互斥锁比同步互斥锁更"昂贵"

异步互斥锁相较于同步互斥锁更"昂贵"的主要原因在于:内部实现复杂、管理任务等待队列和唤醒机制、与异步运行时集成带来额外开销、通常依然使用同步互斥锁增加层间接性、需要创建和管理Future对象。因此,在不涉及跨越.await点持有锁的情况下,推荐使用标准同步互斥锁。只有在需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才是值得的。
106
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)用于保护共享数据,确保只有一个线程访问。标准库互斥锁会阻塞线程,而异步互斥锁会挂起任务而不阻塞。标准库互斥锁性能开销小,适合短时间持有,而异步互斥锁支持异步操作,性能开销大,适合需要在持有锁时执行异步操作的场景。何时使用哪种取决于需要:标准库适用于纯内存数据、锁持有时间短、不需异步操作、对性能要求高;异步适用于需要执行异步操作、保护IO资源、长时间持有锁、不阻塞整个线程。建议默认选择标准库互斥锁,使用包装模式来操作内部数据,对于IO资源考虑使用专门的管理任务。
163
0
1
2025-03-15

SOLID 原则详解

SOLID原则包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则,旨在提高软件设计的灵活性、可维护性和可扩展性。单一职责原则要求类只负责一项职责,避免耦合;开闭原则强调对扩展开放、对修改关闭,通过抽象和多态实现扩展性;里氏替换原则指出子类可替换基类而不影响程序正确性;接口隔离原则要求接口小而精,避免强迫客户端实现不需要的接口;依赖倒置原则强调高层模块不直接依赖低层模块,而是通过抽象接口降低耦合度。这些原则有助于提高代码质量和可维护性,促进系统的稳定性和可扩展性。
94
0
0
2025-03-14

常见设计模式 Python 实现

本文介绍了三种常见的设计模式的 Python 实现。首先是单例模式(Singleton Pattern),通过实现一个数据库连接池管理器来确保系统中只有一个连接池实例。其次是工厂模式(Factory Pattern),设计一个支持多种数据格式解析的文件处理系统,包括 CSV、JSON、XML 和 YAML 格式的文件解析器。最后是观察者模式(Observer Pattern),实现股票市场监控系统,支持多种类型的观察者,并能在股票价格变化时通知注册的观察者。每种模式都包含了相应的抽象类、具体类和测试代码。
66
0
0
2025-03-14

SQLite 锁机制:读锁策略与并发事务分析

本文深入探讨了在使用 SQLite 数据库时的并发事务问题,重点是关于读操作的锁获取策略。在 SQLite 中,读操作的锁策略在不同上下文下会有所变化,包括事务外的读操作和显式事务内的读操作。通过具体实验验证了相关行为,展示了事务 A 能够执行更新操作但在提交时失败,最终数据库状态保持不变。文章总结了SQLite的锁升级延迟特性及事务的 COMMIT 阶段作为关键锁竞争点,既保证了数据一致性也提供了较好的并发性能。
213
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式有多种,包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。进行打包和发布需要跨平台编译、打包、摘要验证、上传和设置分发工件等步骤。使用 GoReleaser 结合 Rust 可实现打包、生成校验和、上传及生成变更日志等功能,但它目前仅支持构建 Go 项目。可通过破解 GoReleaser 构建过程来支持 Rust 项目,利用 dummy.go 文件满足GoReleaser,后阶段执行必要的Rust构建。另外,还有其他Rust发布工具如cargo-release、cargo-deliver、cargo-hublish等,不过目前尚不如GoReleaser完善。
Tec
149
0
0
2024-10-10

解决在 Windows 上 openssl-sys 构建失败的问题

在 Windows 平台构建 Rust 时,遇到缺少 OpenSSL 的错误,需要手动安装配置。通过 choco 安装 OpenSSL,设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,重启 VSCode 后即可成功构建。详细步骤可查阅提供的链接。解决构建失败问题,使得 Rust 在 Windows 上顺利运行。
Tec
829
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

解决 Rust 测试中的并行执行冲突:保护共享资源的策略

在 Rust 开发中,测试是确保代码质量的关键环节。并行执行测试可能会导致共享资源冲突。解决方案包括使用 serial_test crate 标记串行执行的测试、使用互斥锁确保资源访问、创建独立测试环境隔离测试、使用测试模块和一次性初始化共享初始化代码、以及使用 #[ignore] 属性标记特殊测试并单独运行。选择策略取决于项目需求,但要注意潜在问题并确保测试可靠性。
Tec
99
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是一种有效的策略。通过条件编译,我们可以为不同平台提供最优实现,同时保持接口一致性。然而,这可能导致静态分析工具错误地标记特定代码为"未使用"。为解决此问题,可以使用 #[allow(dead_code)] 属性、在测试中使用平台特定代码、使用条件编译标记方法的可见性或使用特性标志。其中,使用条件编译属性抑制特定平台的未使用代码警告是一种精确控制、保持跨平台一致性、保持代码清晰度和文档完整性的优雅解决方案。这些方法解决了静态分析工具警告问题,同时保持了代码的跨平台兼容性和可读性。
Tec
105
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods 出现左右固件版本不一致的问题时,需要分别配对左右耳机。首先确保耳机连接正常,然后按步骤操作:忘记连接、放入耳机盒、长按设置按钮建立连接。待固件自动升级后,重新配对耳机,即可解决问题。在升级过程中需耐心等待,让 iPhone 在空闲时自动更新固件。最后,重新配对耳机时,仍需注意步骤,确保连接正常使用。
830
0
0
2024-07-18