Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁比同步互斥锁更"昂贵"的原因在于其复杂的内部实现和与异步运行时的集成。异步互斥锁需要管理任务等待队列、唤醒机制,以及创建和管理 Future 对象,增加了额外开销。相比之下,标准同步互斥锁的实现更简单,直接映射到操作系统提供的原语上。因此,在不需要跨越.await点持有锁的情况下,推荐使用标准同步互斥锁。只有在需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才是值得的。
153
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁是一种同步原语,用于保护共享数据以确保只有一个线程可以访问。标准库互斥锁在调用.lock()时会阻塞线程,而异步互斥锁在调用.lock().await时会挂起当前任务。标准库互斥锁不适合跨越await点持有锁,而异步互斥锁允许此操作。标准库互斥锁性能较小,适合短时间持有的场景;异步互斥锁性能较大,适合需要在持有锁的同时执行异步操作的场景。最佳实践是除特殊需求外优先选择标准库互斥锁,封装模式可进一步优化操作内部数据。对于IO资源,则考虑使用专门的管理任务。
206
0
1
2025-03-15

SOLID 原则详解

SOLID原则是面向对象设计中的五个重要原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。单一职责原则要求一个类只负责一项职责,以降低耦合度和提高可维护性;开闭原则提倡对扩展开放、对修改关闭,通过抽象和多态实现扩展性;里氏替换原则要保持继承体系的一致性和多态性的正确实现;接口隔离原则要求接口小而精,避免实现不必要的方法;依赖倒置原则强调高层模块不应依赖于低层模块,应依赖于抽象。这些原则有助于提高代码的灵活性、可重用性和可维护性,降低系统的耦合度。
134
0
0
2025-03-14

常见设计模式 Python 实现

本文讨论了三种常见的设计模式在Python中的实现。首先介绍了单例模式,通过实现一个数据库连接池管理器展示了如何确保系统中只有一个连接池实例,并提供了获取连接和释放连接的功能。接着介绍了工厂模式,设计了一个支持多种数据格式解析的文件处理系统,通过抽象基类和工厂类实现了解析器的创建。最后介绍了观察者模式,实现了一个股票市场监控系统,包括股票市场类、观察者类和通知类,展示了当股票价格变化时如何通知注册的观察者。这些设计模式可以帮助开发者构建更灵活、可扩展的系统架构。
113
0
0
2025-03-14

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

本文深入探讨了SQLite数据库的锁机制,特别关注了读操作的锁获取策略。在SQLite中,不同上下文下的读操作锁获取策略有所变化,包括事务外的读操作、显式事务内的读操作以及不同隔离级别的影响。通过实验验证了事务A在执行UPDATE操作时不被阻塞,但在尝试COMMIT时失败,并指出了关键点:UPDATE操作在内存中记录更改,只有在COMMIT阶段才会尝试获取EXCLUSIVE锁,如果其他事务持有SHARED锁,COMMIT将被阻塞直到超时。总结了SQLite的锁升级是延迟的特点,写操作的内存更改和实际文件写入是分离的,事务的COMMIT阶段是最关键的锁竞争点,这种设计既保证了数据一致性,又提供了较好的并发性能。
258
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

文章总结如下:消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布的步骤包括跨平台编译、打包、包摘要、上传和设置分发工件。GoReleaser能够优秀地构建和发布Go项目,支持生成sha 256校验和、上传到Github releases或Amazon S3,并生成变更日志和语义版本等。文章提到了GoReleaser对于Rust不受支持的问题,以及通过dummy.go文件和后阶段钩入来实现GoReleaser构建Rust二进制文件的方法。最后,介绍了Godownloader项目、探索其他Rust发布工具以及适合在OSX上进行Rust跨平台构建的docker-rustup。
Tec
172
0
0
2024-10-10

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

在 Windows 平台用 Rust 构建时,缺少 OpenSSL 可能导致错误。解决方法是使用 choco 安装 OpenSSL,设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,重启 VSCode 即可。详细信息可参考 https://juejin.cn/post/6994715287178182693 和 https://docs.rs/openssl/0.10.36/openssl/#manual。
Tec
985
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决策略包括使用 serial_test crate 进行串行测试,使用互斥锁控制资源访问,创建独立测试环境以避免相互影响,使用测试模块和一次性初始化减少重复代码,以及使用 #[ignore] 标记容易受影响的测试。选择合适策略取决于具体需求,但要注意可能带来的问题并确保测试可靠性和一致性。
Tec
116
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

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

Airpods 左右固件版本不一致

Airpods 的右耳机总是断开连接,导致只有左耳有声音。固件版本不一致会造成只有一侧有声音,需等待自动升级或重新配对解决。分别配对两只耳机,按步骤操作可成功连接。升级固件是被动触发,将设备放近耳机并等待一晚。最后,忘记连接后重新配对耳机即可解决问题。阅读 Apple 文章可获取更多信息。
937
0
0
2024-07-18