Mkdir700's Note

Mkdir700's Note

最新文章

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)是保护共享数据,确保只有一个线程可以访问的同步原语。标准库互斥锁和异步互斥锁的主要区别在于阻塞行为和性能开销。标准库锁会阻塞整个线程,而异步锁会挂起当前任务而不阻塞整个线程。标准库锁不适合跨越.await点持有锁,而异步锁支持。使用标准库锁适合短时间持有的场景,而异步锁适合需要在持有锁时执行异步操作的场景。最佳实践是默认选择标准库锁,特殊需求时再考虑使用异步锁,同时包装锁在结构体中进行操作。对于IO资源,考虑使用专门的管理任务。
94
0
1
2025-03-15

SOLID 原则详解

SOLID原则是面向对象设计的五个重要原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。单一职责原则要求一个类只负责一项职责,避免耦合;开闭原则要求对扩展开放、对修改关闭,通过抽象和多态实现;里氏替换原则要求子类能替换基类而不影响程序正确性;接口隔离原则避免强迫实现不需要的接口;依赖倒置原则要求高层模块依赖抽象,通过控制反转来降低耦合度。这些原则带来的优势包括代码清晰、可扩展性、维护性、稳定性、灵活性和可重用性。
66
0
0
2025-03-14

常见设计模式 Python 实现

文章介绍了三种常见的设计模式在 Python 中的实现,分别是单例模式(Singleton Pattern)、工厂模式(Factory Pattern)和观察者模式(Observer Pattern)。单例模式的示例是实现一个数据库连接池管理器,确保系统中只有一个连接池实例,支持获取和释放连接的功能。工厂模式的示例是设计一个支持多种数据格式解析的文件处理系统,包括 CSV、JSON、XML 和 YAML 格式的文件解析器。观察者模式的示例是实现一个股票市场监控系统,通过注册的观察者实时通知股票价格变化。这些设计模式都在示例代码中得到了详细的实现和测试。
39
0
0
2025-03-14

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

在 SQLite 数据库中,读操作锁的获取策略会根据不同的上下文而变化。在自动提交模式下,单条 SELECT 语句不会获得 SHARED 锁,读取完成后会立即释放锁。而在显式事务中,BEGIN TRANSACTION 后的读操作会获取 SHARED 锁,该锁会持续到事务结束,且多个事务可以同时持有 SHARED 锁。不同隔离级别也会影响读操作的锁获取。通过一个实验验证了 SQLite 的锁升级机制,发现写操作的内存更改和实际文件写入是分离的,事务的 COMMIT 阶段是关键的锁竞争点。这种设计既保证数据一致性又提供较好的并发性能。
172
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布过程需要跨平台编译、打包、摘要验证、上传和设置分发工件。GoReleaser在构建Go项目的打包和分发方面表现出色,但不支持Go以外的项目。通过设置虚拟程序来满足GoReleaser并在后阶段钩入Rust构建,可以实现对Rust项目的发布。姊妹项目godownloader可生成curl-shell组合来分发二进制文件。尽管已有类似GoReleaser的Rust工具,但目前还不够完整。
Tec
114
0
0
2024-10-10

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

在 Windows 上构建 Rust 时,缺少 OpenSSL 导致 openssl-sys 构建失败的问题。解决方法是通过 choco 安装 OpenSSL,设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,然后重新启动 VSCode 进行构建。详细步骤可查看相关文章。
Tec
568
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键。然而,并行执行测试可能会导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行执行测试,使用互斥锁控制资源访问,创建独立的测试环境隔离测试,使用测试模块和一次性初始化共享初始化逻辑,以及使用 #[ignore] 属性标记容易受影响的测试。在选择策略时需考虑实际需求和项目结构,对大多数情况来说,使用 serial_test 或创建独立的测试环境是最有效的方法。需要注意并行测试可能带来的潜在问题,确保测试的可靠性和一致性。
Tec
76
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

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

Airpods 左右固件版本不一致

AirPods 用户可能遇到左右耳机固件版本不一致导致仅一侧有声音的问题。 解决方法包括让耳机自动升级固件、分别连接左右耳机、等待固件升级并重新配对。详细步骤包括按顺序忘记并连接耳机,等待固件更新,最终重新配对。这些方法可解决 AirPods 固件不一致带来的声音播放问题。
717
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

在 MacOS 上,使用<code>osascript -e</code>命令可以获取应用程序的 bundle identifier,用于标识一个应用程序。通过执行<code>osascript -e 'id of app &quot;Obsidian&quot;'</code>命令,可以获取已安装并正在运行的应用程序的 bundle identifier,例如<code>md.obsidian</code>。如果应用程序未安装或未运行,则会返回错误信息。该方法为在 MacOS 上获取应用的捆绑标识符提供了方便的途径。
369
0
0
2024-07-17