Mkdir700's Note

Mkdir700's Note

最新文章

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

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

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)是用于保护共享数据的同步原语,在标准库和异步库中有不同行为和性能开销。标准库互斥锁会阻塞线程,并适合短时持有、不需要异步操作的场景;而异步库的互斥锁会挂起当前任务而不阻塞线程,适合需要执行异步操作、可能长时间持有锁的场景。最佳实践是默认选择标准库互斥锁,除非需要特殊异步操作。可将互斥锁包装在结构体中提供方法操作内部数据,对于IO资源,则考虑使用专门的管理任务。
139
0
1
2025-03-15

SOLID 原则详解

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

常见设计模式 Python 实现

本文介绍了三种常见的设计模式在 Python 中的实现:单例模式,工厂模式和观察者模式。在单例模式中,通过 `DatabaseConnectionPool` 类实现了一个数据库连接池管理器的单例,确保系统中只有一个连接池实例,并支持获取连接和释放连接的功能。工厂模式中,通过 `ParserFactory` 工厂类根据文件扩展名创建对应的解析器,包括了 CSV、JSON、XML 和 YAML 格式的解析器类。观察者模式中,实现了股票市场监控系统,包括 `StockMarket` 类作为具体主题,能够通知注册的观察者股票价格变化的情况。这三种设计模式在实际系统开发中有着广泛的应用,对于架构设计具有重要意义。
54
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-sys构建失败的问题,需要手动操作安装OpenSSL。通过choco安装OpenSSL,并设置环境变量OPENSSL_DIR和OPENSSL_LIB_DIR后,重新构建即可解决。详情可参考提供的链接。
Tec
779
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