Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁比同步互斥锁更"昂贵"的原因在于其内部实现复杂,需要管理任务等待队列和唤醒机制,与异步运行时集成会带来额外开销。通常仍会使用同步互斥锁作为内部保护,增加了间接性,并需创建和管理Future对象。因此,在不需要跨越.await点持有锁的情况下,推荐使用标准同步互斥锁。只有在需要在持有锁的同时执行异步操作时,异步互斥锁的额外开销才是值得的。(RuntimeObject: Rust, Tokio: Why Async Mutex is More "Expensive" Than Sync Mutex)
151
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)是保护共享数据的同步原语,确保只有一个线程可以访问数据。标准库互斥锁与异步互斥锁的主要区别在于阻塞行为与性能开销:标准库锁会阻塞整个线程,而异步锁挂起当前任务。标准库锁不能安全地跨越.await点,而异步锁可以。何时使用哪种互斥锁取决于场景:标准库适合短时间持有、性能要求高的场景;异步锁适合需要同时执行异步操作、长时间持有锁的场景。最佳实践是默认选择标准库互斥锁,对于IO资源考虑使用专门的管理任务。
205
0
1
2025-03-15

SOLID 原则详解

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

常见设计模式 Python 实现

这篇文章介绍了三种常见的设计模式在Python中的实现。首先讨论了单例模式,以数据库连接池为例,要求实现一个全局唯一的连接池实例,限制最大连接数,并提供获取连接和释放连接的功能。其次是工厂模式,设计一个文件处理系统,支持CSV、JSON、XML和YAML格式文件的解析,并统一转换为内部数据结构。最后介绍了观察者模式,实现股票市场监控系统,通过注册的观察者(邮件通知、短信通知、应用内通知)实时通知股票价格变化。这些设计模式有助于提高代码的可维护性和灵活性。
112
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项目的打包和分发,但不支持Go以外的构建。通过一些破解方法,配合dummy.go文件和后阶段钩入实现Rust构建并覆盖Go工件。另外,Godownloader是GoReleaser的姊妹项目,可以生成curl-shell组合来安装二进制文件。探索其他类似于GoReleaser的Rust发布工具,如cargo-release、cargo-deliver和cargo-hublish。如果需要在OSX进行Rust跨平台构建,可以考虑使用docker-rustup。
Tec
171
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 进行串行测试、使用互斥锁确保资源访问、创建独立测试环境避免相互干扰、将相关测试组织到模块中并使用 Once 进行一次性初始化、以及使用 #[ignore] 属性标记特别容易受到影响的测试。选择合适策略取决于具体需求和项目结构,但重要的是意识到并行测试可能带来的问题,并采取措施确保测试可靠性。
Tec
115
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

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

Airpods 左右固件版本不一致

Airpod3 用户遇到右耳机总是断开的问题,发现左右耳机固件版本不一致。解决方案是让耳机升级到最新固件,按步骤分别连接左右耳机并等待后台升级。用户需耐心等待固件升级并可重新配对耳机。参考苹果官方文档与讨论帖。
934
0
0
2024-07-18