Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁相较于同步互斥锁更"昂贵"的主要原因在于内部实现的复杂性,需要管理任务等待队列、唤醒机制和与异步运行时的集成,同时仍然可能使用同步互斥锁。异步互斥锁需要创建和管理Future对象,导致性能开销增加。因此,在不需要跨越.await点持有锁时,推荐使用标准同步互斥锁。只有在需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才是值得的。
169
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁是一种同步原语,用于保护共享数据,确保只有一个线程可以访问。标准库互斥锁在调用`.lock()`时可能会阻塞整个线程,适合短时间持有的场景;而异步互斥锁在调用`.lock().await`时会挂起当前任务,允许在持有锁的同时执行其他异步操作。异步互斥锁适合需要在持有锁的同时执行异步操作的场景,但性能开销较大。最佳实践是默认选择标准库互斥锁,除非有特殊需求,同时对于 IO 资源,考虑使用专门的管理任务。
225
0
1
2025-03-15

SOLID 原则详解

SOLID principles, introduced by Robert C. Martin, aim to make software design more flexible, maintainable, and scalable. The Single Responsibility Principle advocates for classes having a single responsibility to avoid coupling. The Open/Closed Principle emphasizes extending existing code rather than modifying it to add new features. The Liskov Substitution Principle focuses on maintaining consistency in inheritance hierarchies. The Interface Segregation Principle suggests using specialized interfaces over general ones to enhance flexibility. Lastly, the Dependency Inversion Principle promotes high-level modules depending on abstractions, not concrete details, to reduce coupling. These principles lead to clearer, more maintainable code and improved system stability.
145
0
0
2025-03-14

常见设计模式 Python 实现

本文介绍了单例模式、工厂模式和观察者模式的Python实现。单例模式通过一个数据库连接池管理器示例说明了确保系统中只有一个连接池实例。工厂模式展示了设计一个多种数据格式解析的文件处理系统,包括CSV、JSON、XML和YAML文件格式的解析器。观察者模式则通过股票市场监控系统示例说明了如何在股票价格变化时通知多种观察者。这些设计模式有助于构建灵活可维护的系统。
122
0
0
2025-03-14

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

在SQLite数据库中,读操作获取锁的策略取决于不同的上下文情况,包括事务外的读操作和显式事务内的读操作。实验验证显示,虽然事务A可以执行UPDATE操作但在提交时失败,最终数据库状态未改变。SQLite的锁升级是延迟的,写操作的内存更改和文件写入是分离的,COMMIT阶段是关键的锁竞争点。这种设计在保证数据一致性的同时提高了并发性能。
273
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

作为消费者,获取二进制发布的方式可以通过操作系统原生包格式、语言原生包格式、curl shell 组合或现代二进制打包工具。打包和发布包括跨平台编译、打包、摘要验证、上传和设置分发工件。GoReleaser支持Go项目的打包和分发,但不支持构建Go以外的项目。通过在OSX和Linux主机上使用docker进行Rust跨平台编译,可以方便地生成Linux和OSX构建。GoReleaser的破解方法是通过dummy.go文件满足GoReleaser并在后阶段钩入Rust构建。另外,加分项GoDownloader可以生成curl-shell组合来分发二进制文件。探索其他Rust发布工具可以看看cargo-release, cargo-deliver和cargo-hublish。
Tec
183
0
0
2024-10-10

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

在 Windows 平台下构建 Rust 时,缺少 OpenSSL 可能导致错误。在 Linux 下可以用包管理工具解决,而在 Windows 需手动操作。解决方法为使用 choco 安装 OpenSSL,并设置环境变量后重启 VSCode 即可。引用链接:<li>https://juejin.cn/post/6994715287178182693</li>,<li>https://docs.rs/openssl/0.10.36/openssl/#manual</li>。
Tec
1041
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。并行执行测试可能导致共享资源冲突,造成意外行为或测试失败。解决方案包括使用 serial_test crate 进行串行执行测试、互斥锁控制资源访问、创建独立测试环境、使用测试模块和一次性初始化,以及使用 #[ignore] 属性标记特别受影响的测试。选择适合项目需求的策略至关重要,保证测试可靠性和一致性。
Tec
124
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是常见的做法。借助强大的条件编译功能,可以根据不同目标平台选择不同的代码实现,保持接口一致性。然而,这可能导致静态分析工具错误标记特定代码为"未使用",可能会影响代码质量。解决这个问题的策略包括使用 `#[allow(dead_code)]` 属性、在测试中使用平台特定代码、使用条件编译标记方法的可见性以及使用特性标志。通过这些方法,可以精确控制平台特定代码的警告,保持跨平台一致性,提高代码清晰度和文档完整性。这些方法为处理平台特定代码和未使用代码警告提供了优雅解决方案。
Tec
140
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods出现左右固件版本不一致的问题,导致只有一只耳机有声音。解决方法包括让耳机自动升级固件以及分别配对左右耳机。具体步骤包括将耳机放入盒子等待、按键设置、等待固件升级等。最后再重新配对耳机,解决固件版本显示错误的问题。可参考苹果官方支持文档和讨论帖子了解更多信息。
962
0
0
2024-07-18