Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁相较于同步互斥锁更昂贵的主要原因在于其复杂的内部实现,涉及管理任务等待队列和唤醒机制、与异步运行时的集成以及在内部仍使用同步互斥锁。推荐在不需要跨越.await点持有锁时使用标准同步互斥锁,只有在需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才是值得的。
174
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)是用于保护共享数据的同步原语,确保只有一个线程可以访问数据。标准库互斥锁和异步互斥锁的区别在于阻塞行为、跨越.await点以及性能开销。标准库适合短时间持有锁的场景,而异步适合需要在持有锁时执行异步操作的情况。最佳实践是默认选择标准库互斥锁,特殊情况下考虑包装模式或专门管理任务。针对IO资源,可以考虑使用专门的管理任务来处理请求。
235
0
1
2025-03-15

SOLID 原则详解

SOLID principles, including Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle, aim to improve software design flexibility, maintainability, and scalability. Each principle is detailed with core concepts, explanations, examples, and benefits. By adhering to these principles, code becomes clearer, easier to test and maintain, with reduced coupling between classes, increased reusability, extensibility, and system stability. The principles promote single responsibility, open for extension but closed for modification, substitution without affecting correctness, interface segregation to avoid unnecessary methods, and dependency inversion through abstraction and decoupling.
153
0
0
2025-03-14

常见设计模式 Python 实现

本文介绍了三种常见的设计模式在 Python 中的实现:单例模式、工厂模式和观察者模式。在单例模式中,实现了一个数据库连接池管理器,确保系统中只有一个连接池实例;在工厂模式中,设计了支持多种数据格式解析的文件处理系统,包括实现了 CSV、JSON、XML 和 YAML 文件格式的解析器;在观察者模式中,实现了一个股票市场监控系统,支持多种类型的观察者,如邮件通知、短信通知和应用内通知。这些设计模式为软件架构提供了灵活性和可扩展性。
127
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,需在 Windows 上手动安装 OpenSSL。使用 choco 安装 OpenSSL,设置环境变量后重启 VSCode 可解决问题。详细步骤参考 https://juejin.cn/post/6994715287178182693。
Tec
1061
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 右耳总是断开的问题,导致左耳有声音。经过尝试忘记并重连,发现固件版本不一致。解决方法是待固件自动升级,同时进行分别配对左右耳机,并在夜间待其升级完成。最后重新配对即可解决问题。请参考 Apple 官方链接进一步了解。
977
0
0
2024-07-18