Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁相较于同步互斥锁更"昂贵"的原因在于内部实现复杂,需要管理任务等待队列和唤醒机制,以及与异步运行时的集成带来额外开销。通常在内部仍然使用同步互斥锁,增加了一层间接性,并需要创建和管理 Future 对象。因此,在不需要跨越.await点持有锁的情况下,推荐使用标准同步互斥锁。只有在需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才是值得的。
157
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁是一种同步原语,用于保护共享数据,确保每次只有一个线程可以访问。标准库互斥锁在调用`.lock()`时会阻塞线程,而异步互斥锁在调用`.lock().await`时会挂起任务而不阻塞整个线程。两者区别在于阻塞行为、跨越`.await`点和性能开销。使用标准库互斥锁适合短时间持有锁的场景,而异步互斥锁适合需要在持有锁时执行异步操作的场景。最佳实践是默认选择标准库互斥锁,除非有特殊需求。包装模式和使用专门的管理任务可提高效率。
210
0
1
2025-03-15

SOLID 原则详解

SOLID principles, introduced by Robert C. Martin, aim to improve flexibility, maintainability, and scalability in software design. The Single Responsibility Principle advocates that a class should have only one reason to change, promoting clearer, more maintainable code. The Open/Closed Principle encourages extending existing code rather than modifying it, enhancing scalability and reducing risks. The Liskov Substitution Principle ensures that subclasses can replace their base classes without affecting program correctness, maintaining consistency and reliability. The Interface Segregation Principle suggests using multiple specific interfaces over a single broad interface, increasing flexibility and clarity. The Dependency Inversion Principle states that high-level modules should not directly depend on low-level modules, promoting abstraction and reducing coupling. By adhering to these principles, code becomes clearer, more flexible, and easier to maintain.
136
0
0
2025-03-14

常见设计模式 Python 实现

本文介绍了三种常见的设计模式在 Python 中的实现,分别是单例模式、工厂模式和观察者模式。在单例模式中,通过实现一个数据库连接池管理器,确保系统中只存在一个连接池实例,并支持获取连接和释放连接的功能。在工厂模式中,设计一个支持多种数据格式解析的文件处理系统,包括 CSV、JSON、XML 和 YAML 格式的文件解析,通过工厂类创建对应的解析器。在观察者模式中,实现一个股票市场监控系统,当股票价格变化时通知注册的观察者,包括邮件通知、短信通知和应用内通知等多种观察者。这些设计模式在软件架构设计中起到了重要作用。
116
0
0
2025-03-14

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

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

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布的步骤包括跨平台编译、打包、摘要、上传和设置分发工件。GoReleaser支持Go项目打包和分发,但不支持构建Go以外的项目。通过在OSX主机上使用cross进行Rust跨平台编译,可以方便生成Linux和OSX构建。GoReleaser的破解方法可实现Rust构建,并通过dummy.go文件满足GoReleaser。另外提到的GoDownloader可以生成curl-shell组合并免费提供安装二进制文件的shell脚本。探索其他Rust发布工具如cargo-release、cargo-deliver和cargo-hublish。
Tec
173
0
0
2024-10-10

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

在 Windows 上构建 Rust 时遇到 openssl-sys 错误,缺少 OpenSSL。需手动操作,设置 OPENSSL_DIR 环境变量并安装 libssl-dev。解决方法为使用 choco 安装 OpenSSL,并设置 OPENSSL_DIR 和 OPENSSL_LIB_DIR 环境变量,重启 VSCode 即可。详细步骤可参考 https://juejin.cn/post/6994715287178182693。
Tec
999
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是关键环节,但测试并行执行导致共享资源冲突是常见问题。解决方案包括使用 serial_test crate 串行执行测试、使用互斥锁确保资源独占、创建独立测试环境隔离测试、使用测试模块和一次性初始化共享初始化逻辑、使用 #[ignore] 属性标记容易受影响测试并单独运行。选择适合的策略取决于需求和项目结构,但要意识到并行测试可能带来潜在问题,采取措施确保测试可靠性和一致性。
Tec
119
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中处理跨平台开发时,使用条件编译可以实现平台特定代码,保持接口一致性。然而,静态分析工具可能错误标记特定平台代码为"未使用"。解决方法包括使用 #[allow(dead_code)] 属性、在测试中使用平台特定代码、条件编译标记方法的可见性以及使用特性标志。另外,使用条件编译属性抑制特定平台的未使用代码警告不仅控制精准,而且保持了跨平台一致性、代码清晰度和文档完整性。这些方法综合起来是处理平台特定代码的优雅解决方案。
Tec
131
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods 在使用过程中可能出现左右固件版本不一致导致只有一只耳机有声音的问题。解决方法包括分别配对左右耳机、等待固件升级、重新配对等步骤。固件版本不同需等待后台自动升级,并可以在睡觉时触发更新。最终重新配对后即可正常使用。详细步骤可参考官方教程。
947
0
0
2024-07-18