Mkdir700's Note

Mkdir700's Note

最新文章

Tokio:应该使用哪种 mutex?

互斥锁是用于保护共享数据的同步原语,确保在任何时刻只有一个线程可以访问数据。在标准库和异步互斥锁之间有几个主要区别:阻塞行为、跨越.await点的能力以及性能开销。标准库互斥锁会阻塞整个线程,而异步互斥锁允许任务挂起而不阻塞整个线程。异步互斥锁适合需要在持有锁的同时执行异步操作的场景,但性能开销较大。在选择互斥锁时,标准库适用于保护内存数据且锁持有时间短的情况,而异步互斥锁适用于需要在持有锁期间执行异步操作的情况。最佳实践是默认选择标准库互斥锁,除非有特殊需求,同时为 IO 资源考虑使用专门的管理任务。
87
0
1
2025-03-15

SOLID 原则详解

SOLID 原则详解涵盖了面向对象设计中的五个重要原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。单一职责原则要求类只承担一个责任,以减少耦合度。开闭原则指导软件实体应对扩展开放、对修改关闭,通过抽象和多态实现可扩展性。里氏替换原则强调子类能够替换基类而不影响程序正确性。接口隔离原则避免强迫实现不必要接口,提高灵活性。依赖倒置原则要求高层模块不直接依赖低层模块,通过抽象接口减少耦合度。这些原则有助于优化设计、提高可维护性和灵活性。
62
0
0
2025-03-14

常见设计模式 Python 实现

文章介绍了常见设计模式在 Python 中的实现。其中包括了单例模式(Singleton Pattern)的实现数据库连接池管理器,工厂模式(Factory Pattern)设计多种数据格式解析的文件处理系统以及观察者模式(Observer Pattern)实现股票市场监控系统。单例模式通过类的实例化确保全局唯一性,工厂模式通过工厂方法创建对应的解析器,观察者模式则在股票价格变化时通知注册的观察者。这些设计模式提供了灵活、可扩展、易于维护的架构设计方法。
34
0
0
2025-03-14

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

在使用SQLite数据库时,经常会遇到并发事务的问题。本文深入探讨了SQLite的锁机制,特别是关于读操作的锁获取策略。SQLite中的读操作获取锁的策略根据不同上下文而变化,包括事务外的读操作和显式事务内的读操作。通过实验验证了在并发事务中,事务A能执行UPDATE操作但在尝试COMMIT时失败,数据库状态保持不变。SQLite的锁升级是延迟的,写操作的内存更改和实际文件写入是分离的,COMMIT阶段是关键的锁竞争点。这种设计保证了数据一致性,同时提供较好的并发性能。
160
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获得二进制发布的方式包括操作系统原生包格式、语言原生包格式、使用curl shell组合和现代二进制打包工具。发布过程需要跨平台编译、打包、摘要和上传。GoReleaser支持Go项目的打包和分发,但不支持Go以外的构建。通过放置dummy.go文件并在构建后阶段钩入,可以实现GoReleaser支持Rust项目。GoDownloader是GoReleaser的姊妹项目,可生成curl-shell组合用于安装二进制文件。尽管有其他Rust发布工具如cargo-release、cargo-deliver和cargo-hublish,GoReleaser仍是一个出色的选择。
Tec
112
0
0
2024-10-10

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

文章介绍了在 Windows 下构建 Rust 项目时遇到缺少 OpenSSL 的问题,解决方法是使用 choco 安装 OpenSSL,并设置相应的环境变量。详细的操作步骤包括安装 OpenSSL 和设置 OPENSSL_DIR、OPENSSL_LIB_DIR 环境变量,在 VSCode 中重新构建项目即可解决该问题。文章提供了相关链接供进一步参考。
Tec
521
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

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

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

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

Airpods 左右固件版本不一致

问题描述了Airpods因固件版本不一致导致右耳机无声音的情况。解决方案是让两只耳机升级到最新固件版本,然后按步骤分别连接左右耳机,并等待升级完成。当固件升级后重新配对,问题得以解决。文章提供了详细的操作步骤和参考链接。
690
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

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

在 MacOS 上,使用 `osascript` 命令可以执行苹果脚本和其他 OSA 语言脚本。通过 `-e` 选项,可以在命令行中直接输入脚本代码执行,例如获取应用程序的 bundle identifier。Bundle identifier 是标识应用程序的唯一字符串,通常格式为 `com.companyname.appname`。如果应用程序已安装并运行,命令会返回其 bundle identifier,否则可能会返回错误信息。
361
0
0
2024-07-17