Mkdir700's Note

Mkdir700's Note

最新文章

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)是用于保护共享数据,确保只有一个线程可以访问的同步原语。两种互斥锁的主要区别在于阻塞行为和性能开销。标准库互斥锁在调用.lock()时会导致阻塞整个线程,而异步互斥锁在.lock().await时会挂起当前任务而不是整个线程。异步互斥锁适合需要在持有锁的同时执行异步操作的场景,但性能开销较大。最佳实践是默认选择标准库互斥锁,特殊需求下再选择异步互斥锁。对于IO资源,应考虑使用专门的管理任务来处理。
81
0
1
2025-03-15

SOLID 原则详解

SOLID原则详解包括了SOLID五个重要原则:单一职责原则,开闭原则,里氏替换原则,接口隔离原则和依赖倒置原则。单一职责原则要求一个类只负责一项职责,避免多个职责耦合;遵循原则的代码更清晰、易维护、降低耦合度。开闭原则要求对扩展开放,对修改关闭,通过多态和抽象实现扩展性,降低维护成本。里氏替换原则指出子类应该能替换其父类而不影响程序正确性,避免重写父类方法破坏继承体系。接口隔离原则避免强制实现多余接口,提高代码灵活性和可重用性。依赖倒置原则要求通过抽象降低模块间耦合,实现控制反转。遵循原则的代码提高了系统稳定性和可维护性。
59
0
0
2025-03-14

常见设计模式 Python 实现

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

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

在SQLite数据库中,读操作的锁获取策略根据上下文不同而变化,包括事务外的读操作和显式事务内的读操作。不同隔离级别也会影响读操作的锁获取方式。文章通过实验验证了SQLite锁机制中的一些行为,特别是涉及并发事务的情况。实验结果表明,事务A能够执行UPDATE操作,但在尝试提交时失败(database is locked),最终数据库状态保持不变。文章总结了SQLite的锁升级是延迟的,写操作的内存更改和实际文件写入是分离的,以及事务的COMMIT阶段是关键的锁竞争点。这种设计既保证了数据的一致性,又提供了较好的并发性能。
156
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获得二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布二进制文件需要跨平台编译、打包、摘要验证、上传和设置分发工件等步骤。GoReleaser在构建和分发Go项目方面表现出色,但不支持Go以外的项目。通过破解的方法,可以实现GoReleaser构建过程的定制化。辅助项目GoDownloader提供生成curl-shell组合的功能。探索其他Rust发布工具如cargo-release、cargo-deliver、cargo-hublish。对于在OSX上进行Rust跨平台构建,可考虑使用docker-rustup。
Tec
111
0
0
2024-10-10

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

在 Windows 平台构建 Rust 时遇到 openssl-sys 错误,缺少 OpenSSL。解决方法是使用 choco 安装 OpenSSL,并设置环境变量。安装完成后设置 OPENSSL_DIR 和 OPENSSL_LIB_DIR,然后重启 VSCode 即可构建成功。详细步骤可参考提供的链接。
Tec
507
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突,影响测试效果。为解决这一问题,可以使用 serial_test crate 进行串行执行测试,使用互斥锁控制资源访问,创建独立的测试环境或者利用测试模块和一次性初始化。另外,可以使用 #[ignore] 属性标记容易受到影响的测试,并单独运行。选择合适的策略取决于具体需求和项目结构,但无论哪种方法,都需要注意并行测试的潜在问题,确保测试的可靠性和一致性。
Tec
70
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发需要处理平台特定代码和代码分析问题。使用条件编译可以实现平台特定代码,确保接口一致性。然而,静态分析工具可能误标记部分代码为"未使用",可通过属性 `#[allow(dead_code)]` 或在测试中使用平台特定代码解决。另一种方法是使用条件编译标记方法的可见性或特性标志,如在 Cargo.toml 中定义特性 `png_support`。最后,可以使用条件编译属性抑制特定平台的未使用代码警告,在保持跨平台兼容性和可读性的同时解决问题。这些方法有效处理平台特定代码和未使用代码警告,维护代码清晰度和文档完整性。
Tec
78
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods用户遇到左右耳机固件版本不一致导致只有一侧有声音问题时,可通过将耳机分别配对、等待升级和重新配对来解决。首先确认固件版本不同,让它们升级到最新版本,然后按指定步骤分别连接左右耳机,并在后台等待固件升级完成。随后再重新配对耳机,确保连接正常。这些步骤能解决单侧耳机无声音问题,保证AirPods正常使用。参考Apple官方支持文档可获得更多帮助。
675
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

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

在 MacOS 上,使用 `osascript` 命令可以执行 AppleScript 和其他 OSA 语言脚本。通过 `-e` 选项,可以在命令行中获取应用程序的 bundle identifier,例如 `osascript -e 'id of app "Obsidian"'`。Bundle identifier 是唯一标识应用程序的字符串,格式通常为 `com.companyname.appname`。如果应用程序存在并正在运行,命令将返回其 bundle identifier,否则可能会显示错误信息。
359
0
0
2024-07-17