Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁相比同步互斥锁更昂贵的原因在于内部实现复杂,需要管理任务等待队列和唤醒机制,与异步运行时集成的额外开销,以及内部仍然使用同步互斥锁增加的间接性。推荐在不需要跨越 .await 点持有锁时使用标准同步互斥锁。只有需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才值得。在高竞争场景下,异步互斥锁运行更慢,可能消耗更多内存和 CPU。
171
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁是一种同步原语,用于保护共享数据,确保一次只能有一个线程访问。标准库互斥锁在调用.lock()时会阻塞线程,而异步互斥锁的.lock().await则会挂起当前任务而不是阻塞整个线程。两者的主要区别包括阻塞行为和跨越.await点的能力。标准库互斥锁性能开销较小,适合短时间持有,而异步互斥锁由于支持异步操作,性能开销较大,适合需要执行异步操作的场景。最佳实践建议默认选择标准库互斥锁,使用异步互斥锁场景包括需要执行异步操作、保护IO资源等。
231
0
1
2025-03-15

SOLID 原则详解

SOLID 原则是面向对象设计中重要的五个原则,包括单一职责原则(S),开闭原则(O),里氏替换原则(L),接口隔离原则(I),依赖倒置原则(D)。单一职责原则要求一个类只负责一项职责,可提高代码清晰度和可维护性。开闭原则指出软件实体应对扩展开放,对修改关闭,提高系统稳定性。里氏替换原则要求子类能替换父类而不影响程序正确性,保持继承体系一致性。接口隔离原则避免强迫客户端实现不需要的接口,提高代码灵活性。依赖倒置原则要求高层模块不依赖于低层模块,通过抽象接口降低耦合度。这些原则可帮助提高代码质量和可维护性。
148
0
0
2025-03-14

常见设计模式 Python 实现

本文介绍了三种常见的设计模式在 Python 中的实现。首先是单例模式,通过实现一个数据库连接池管理器来确保系统中只有一个连接池实例。其次是工厂模式,设计一个文件处理系统支持多种数据格式解析,包括 CSV、JSON、XML 和 YAML。最后是观察者模式,实现一个股票市场监控系统,当股票价格变化时通知注册的观察者,包括邮件通知、短信通知和应用内通知。这些模式在软件架构设计中起着重要作用,帮助程序员编写可维护、可扩展的代码。
126
0
0
2025-03-14

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

本文深入探讨了SQLite数据库的锁机制,特别是关于读操作的锁获取策略。在自动提交模式下,单条SELECT语句不会获取SHARED锁;而在显式事务中,读操作会获取SHARED锁并持续到事务结束。通过一个实验验证了在事务A进行更新操作时,但在尝试提交时失败的情况,最终数据库状态保持不变。总结表明SQLite的锁升级是延迟的,写操作的内存更改和实际文件写入是分离的,事务的COMMIT阶段是关键的锁竞争点,这种设计保证了数据一致性和较好的并发性能。
276
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者喜欢获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell组合和现代二进制打包工具。打包和发布需要跨平台编译、打包、生成摘要、上传到提供者和设置分发工件。GoReleaser适用于构建和分发Go项目,但不支持其他语言。使用GoReleaser的破解方法包括通过dummy.go文件满足GoReleaser,钩入Rust构建,并覆盖Go工件。GoDownloader是GoReleaser的姊妹项目,生成curl-shell组合用于分发二进制文件。探索其他类似GoReleaser的Rust发布工具如cargo-release、cargo-deliver和cargo-publish。对于OSX上的跨平台构建,可以考虑docker-rustup。
Tec
186
0
0
2024-10-10

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

在 Windows 平台构建 Rust 项目时遇到 openssl-sys 缺失的问题,需要手动安装 OpenSSL。通过 choco 安装 OpenSSL,并设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR。详细步骤可查看指定链接,安装完成后重启 VSCode 即可解决构建问题。
Tec
1052
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 标记应该串行执行的测试、使用互斥锁控制资源访问、创建独立的测试环境隔离测试、使用测试模块和一次性初始化减少重复代码以及使用 #[ignore] 属性分离问题测试。选择合适的策略取决于具体需求和项目结构,但重要的是意识到并行测试可能带来的问题,并采取适当措施确保测试可靠性。
Tec
126
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是一个常见做法。通过 Rust 提供的强大条件编译功能,可以根据目标平台选择不同的代码实现,从而保持接口的一致性。然而,这可能导致静态分析工具错误标记特定平台代码为"未使用",进而产生警告。为解决这一问题,可以使用`#[allow(dead_code)]`属性、测试中使用平台特定代码、条件编译标记方法的可见性或者特性标志。这些解决方案能够精确控制未使用代码警告,保持跨平台一致性,确保代码清晰可读,并且保持文档完整性,是优雅处理平台特定代码和未使用代码警告的方式。
Tec
142
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods 用户可能会遇到左右耳机固件版本不一致导致只有一只耳机有声音的问题。解决方法包括让两只耳机升级到最新固件版本并分别配对,等待固件被 passively 更新,以及重新配对耳机。操作步骤详细,包括放入耳机盒、长按设置按钮等。通过这些步骤后即可正常使用两只 AirPods。
969
0
0
2024-07-18