Mkdir700's Note

Mkdir700's Note

最新文章

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

异步互斥锁相较于同步互斥锁更"昂贵",因内部实现复杂,涉及任务唤醒机制、状态管理和 Future 实现。其性能开销主要包括内存消耗、CPU执行代码、额外间接层和运行时集成。在IO密集型操作、长时间持有锁和资源有限环境等场景下,异步互斥锁的优势超过成本。推荐在不需跨越.await点持有锁时使用同步互斥锁,只有在需要持有锁执行异步操作时才考虑异步互斥锁的额外开销。
78
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

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

SOLID 原则详解

SOLID原则是面向对象设计的重要原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。单一职责原则指一个类只应该有一个引起变化的原因,避免耦合;开闭原则要求软件实体对扩展开放、对修改关闭,通过抽象和多态实现可扩展性;里氏替换原则强调子类能替换基类、保持继承体系的一致性;接口隔离原则要求接口小而精,避免实现不必要的方法;依赖倒置原则指高层模块不应直接依赖低层模块,而应依赖抽象,实现控制反转。这些原则有利于提高代码质量、可维护性和灵活性。
79
0
0
2025-03-14

常见设计模式 Python 实现

文章讨论了三种常见的设计模式在 Python 中的实现。首先是单例模式,通过实现一个数据库连接池管理器来确保系统中只有一个连接池实例。然后是工厂模式,设计一个文件处理系统能够处理不同格式的文件并将它们转换为统一的数据结构。最后是观察者模式,实现一个股票市场监控系统,当股票价格变化时通知注册的观察者,包括邮件通知、短信通知和应用内通知。这些设计模式提供了灵活且可扩展的解决方案,有助于构建更易维护和可复用的系统。
47
0
0
2025-03-14

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

本文深入探讨了 SQLite 数据库中的锁机制,特别是关于读操作的锁获取策略。在自动提交模式下,单条 SELECT 语句不会获取 SHARED 锁;显式事务内的读操作会持续获取 SHARED 锁直至事务结束;不同隔离级别对读操作锁的获取也有影响。通过一个实验验证了事务 A 在 UPDATE 操作后被阻塞在 COMMIT 阶段,证实了 SQLite 的锁升级是延迟的特点。文章总结了 SQLite 的锁升级延迟、写操作内存更改与文件写入分离以及 COMMIT 阶段的关键性等特点,确保了数据一致性和并发性能。
195
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、使用 curl shell 组合、现代二进制打包工具等,发布需跨平台编译、打包、摘要和上传。GoReleaser支持Go项目打包和分发,但不能构建Go以外的内容。破解GoReleaser构建过程通过dummy.go和Rust构建工件。GoDownloader是GoReleaser的姊妹项目,生成curl-shell组合。探索其他Rust发布工具如cargo-release,cargo-deliver,cargo-hublish。可使用docker-rustup实现从OSX进行Rust跨平台构建。整体来看,GoReleaser在构建和发布方面表现出色,但支持多语言仍有改进空间。
Tec
135
0
0
2024-10-10

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

在 Windows 上构建 Rust 时遇到缺少 OpenSSL 的错误,需要手动安装并设置环境变量。使用 choco 安装 OpenSSL,设置 OPENSSL_DIR 和 OPENSSL_LIB_DIR 环境变量,然后重启 VSCode 即可解决问题。详细步骤见提供的链接。
Tec
726
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行测试、使用互斥锁控制资源访问、创建独立的测试环境以隔离测试、使用测试模块和一次性初始化共享初始化逻辑、以及使用 #[ignore] 属性标记特别受并行执行影响的测试。选择适当的策略取决于具体需求和项目结构,重要的是意识到并行测试潜在问题,确保测试的可靠性和一致性。
Tec
89
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是常见的做法。通过 `#[allow(dead_code)]` 属性、在测试中使用平台特定代码、使用条件编译标记方法的可见性以及使用特性标志等策略,可以有效解决平台特定代码可能带来的未使用代码警告问题。这些方法不仅精确控制代码行为,保持跨平台一致性,还提高了代码清晰度和文档完整性。综合而言,这些方法是处理平台特定代码和未使用代码警告的优雅解决方案。
Tec
95
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods 使用过程中可能出现固件版本不一致的问题,导致只有一只耳机有声音,解决方法是让两只耳机升级到最新版本。可以尝试分别配对左右耳机,并等待后台自动升级固件。在等待过程中需要将 AirPods 放入充电盒并靠近 iPhone,第二天重新配对。若固件版本依然显示老版本,可尝试重新配对。整个过程需留意正确的操作步骤,以确保 AirPods 正常使用。
776
0
0
2024-07-18