Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁相较于同步互斥锁更昂贵的原因在于其复杂的内部实现和与异步运行时的集成带来的额外开销。异步互斥锁需要管理任务等待队列、唤醒机制,内部通常还使用同步互斥锁,增加一层间接性,并需要创建和管理 Future 对象。因此,除非需要在持有锁的同时执行异步操作,否则推荐使用标准同步互斥锁。异步互斥锁对于IO密集型操作、长时间持有锁、资源有限环境等场景才值得使用。
90
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁是用于保护共享数据的同步原语,确保只有一个线程可以访问数据。标准库互斥锁和异步互斥锁在阻塞行为、跨越.await点和性能开销方面有区别。标准库适合短时间持有、性能要求高的场景,而异步适合需要在持有锁时执行异步操作、锁可能长时间持有的场景。最佳实践是默认选择标准库互斥锁,对于 IO 资源考虑使用专门的管理任务。
136
0
1
2025-03-15

SOLID 原则详解

SOLID原则是面向对象设计中的重要原则,分别是单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。单一职责原则要求类只负责一项职责,以降低耦合度;开闭原则指出对扩展开放,对修改关闭,提高系统稳定性;里氏替换原则要求子类可替换父类,保持继承体系一致;接口隔离原则提倡多个专门接口胜过总接口,提高灵活性;依赖倒置原则强调抽象不依赖细节,通过依赖注入等方式降低耦合度。这些原则有助于设计灵活、可维护的软件架构。
88
0
0
2025-03-14

常见设计模式 Python 实现

这篇文章介绍了三种常见的设计模式在 Python 中的实现。第一部分讨论了单例模式,以实现一个数据库连接池管理器为例。要求使用单例模式确保全局唯一连接池实例,并支持获取连接和释放连接的功能。第二部分介绍了工厂模式,设计一个文件处理系统,支持多种数据格式解析。通过实现抽象基类和具体解析器类,并使用工厂方法根据文件扩展名创建对应的解析器来实现。最后一部分讨论了观察者模式,实现一个股票市场监控系统。设计股票市场类来管理股票价格并通知观察者,实现邮件通知、短信通知和应用内通知观察者。文章关键词为"架构设计,常见设计模式 Python 实现"。
53
0
0
2025-03-14

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

本文深入探讨了 SQLite 的锁机制,特别是关于读操作的锁获取策略。在自动提交模式下,单条 SELECT 语句不会获取 SHARED 锁;在显式事务中,会获取 SHARED 锁并持续到事务结束。不同隔离级别也会影响读操作的锁获取。通过一个实验验证了这些行为,展示了事务 A 在执行 UPDATE 操作时不被阻塞,但在 COMMIT 时失败;最终数据库状态保持不变。SQLite 的锁升级是延迟的,写操作的内存更改和文件写入是分离的,COMMIT 阶段是关键的锁竞争点。这种设计既保证了数据一致性,又提供了良好的并发性能。
202
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、使用 curl shell 组合和现代二进制打包工具。打包和发布包括跨平台编译、打包、摘要、上传和设置分发工件。GoReleaser支持Go项目的打包和分发,但不支持Go以外的任何东西。破解GoReleaser构建过程可通过dummy.go文件和后阶段钩入来进行。神秘的Godownloader是GoReleaser的姊妹项目,可生成curl-shell组合,方便安装二进制文件。探索其他类似于GoReleaser的Rust发布工具,如cargo-release、cargo-deliver和cargo-hublish。如果想在OSX进行Rust跨平台构建,可尝试docker-rustup。
Tec
142
0
0
2024-10-10

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

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

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

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

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

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是关键。通过条件编译,可以为不同平台提供最优实现,并保持接口一致性。然而,这可能导致静态分析工具错误标记代码为未使用。解决方法包括使用属性忽略警告、在测试中使用特定代码、标记方法可见性以及使用特性标志。其中,使用条件编译属性抑制特定平台的未使用代码警告是一种优雅解决方案,能精确控制警告、保持一致性、提高代码清晰度和完整性。这些策略帮助处理平台特定代码和未使用代码警告,确保代码跨平台兼容性和可读性。
Tec
99
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods 的固件版本不一致可能导致只有一侧耳机有声音的问题。为解决此问题,可让两只耳机分别连接并升级固件。首先,将左右耳机分开连接,然后等待固件自动升级。待升级完成后,重新配对耳机以确保正常使用。iPhone 在更新固件时会选择用户使用频次最少的时候进行后台更新。确保耳机连接状态正常,并可参考相关支持文档进一步解决问题。
792
0
0
2024-07-18