<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[czy092的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/czy092</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; czy092]]></copyright><item><title><![CDATA[Rust项目的基石：Cargo.toml配置文件深度解析]]></title><link>https://blog.youkuaiyun.com/czy092/article/details/154153040</link><guid>https://blog.youkuaiyun.com/czy092/article/details/154153040</guid><author>czy092</author><pubDate>Thu, 30 Oct 2025 22:30:50 +0800</pubDate><description><![CDATA[Cargo.toml不仅仅是一个简单的配置文件，它是Rust项目的声明式清单，定义了项目的身份、依赖关系和构建行为。在实际项目中，我通常会及时升级到最新edition，以利用新的语言特性和改进的错误诊断。在我的项目中，通过build.rs配合构建依赖，实现了协议缓冲区的自动生成和静态资源的嵌入，显著简化了开发流程。更重要的是，工作空间级别的依赖版本统一管理，确保了内部crate间的一致性。在我的实践中，这种模式特别适合插件系统和多后端支持的场景，让用户只为实际使用的功能付出代价。]]></description><category></category></item><item><title><![CDATA[Rust中的惰性求值机制：性能优化的哲学]]></title><link>https://blog.youkuaiyun.com/czy092/article/details/154152564</link><guid>https://blog.youkuaiyun.com/czy092/article/details/154152564</guid><author>czy092</author><pubDate>Thu, 30 Oct 2025 22:27:15 +0800</pubDate><description><![CDATA[在实际项目中，我曾需要处理大规模日志文件的流式分析。如果一次性加载到内存，会造成巨大的内存压力；如果采用传统的逐行读取，代码会变得冗长且难以维护。通过构建自定义的惰性迭代器，配合Rust的闭包捕获机制，我实现了一个既内存高效又表达清晰的解决方案。关键在于理解迭代器适配器的本质：它们是轻量级的状态机，捕获必要的上下文，延迟实际的计算。通过实现Iteratortrait，我们可以将复杂的数据处理逻辑封装为可组合的、惰性的转换单元。这种方式不仅提升了代码的可读性，还允许编译器进行跨越抽象边界的优化。]]></description><category></category></item><item><title><![CDATA[Rust异步运行时的核心：Waker与唤醒机制深度解析]]></title><link>https://blog.youkuaiyun.com/czy092/article/details/154152041</link><guid>https://blog.youkuaiyun.com/czy092/article/details/154152041</guid><author>czy092</author><pubDate>Thu, 30 Oct 2025 22:23:34 +0800</pubDate><description><![CDATA[在构建高性能系统时，理解Waker机制能让我们写出更高效的异步代码。我曾经实现过一个自定义的批处理Future，它会收集多个请求并批量处理。关键在于正确管理Waker：当有新请求到来时，只有在批次达到阈值或超时时才真正唤醒。这种实现需要仔细处理Waker的存储和替换。由于poll可能被多次调用，每次都可能传入不同的Waker，我们需要使用原子操作来安全地更新Waker引用。同时，为了避免惊群效应，需要在唤醒时检查状态，避免不必要的轮询。更进一步，我们可以实现分层唤醒策略。]]></description><category></category></item><item><title><![CDATA[Rust异步递归的解决方案：从问题到实践]]></title><link>https://blog.youkuaiyun.com/czy092/article/details/154151701</link><guid>https://blog.youkuaiyun.com/czy092/article/details/154151701</guid><author>czy092</author><pubDate>Thu, 30 Oct 2025 22:18:42 +0800</pubDate><description><![CDATA[递归函数需要在栈上为每次调用分配空间，而异步函数的返回类型包含了函数体中所有await点的状态信息。在递归场景下，这意味着Future的大小会无限增长，形成一个自引用的类型定义，这在Rust的类型系统中是不被允许的。当我们用异步的视角重新审视问题时，往往能发现更高效、更可扩展的解决方案。对于性能敏感的场景，我们需要更深入的思考。异步递归的解决方案不应该是简单的语法糖，而应该是对并发模型、性能权衡和系统设计的深度思考。这种方式不仅解决了递归问题，还提供了更灵活的控制流，可以实现背压控制、并发限制等高级特性。]]></description><category></category></item><item><title><![CDATA[Rust异步编程核心：Poll机制与状态机转换的深度解析]]></title><link>https://blog.youkuaiyun.com/czy092/article/details/154150643</link><guid>https://blog.youkuaiyun.com/czy092/article/details/154150643</guid><author>czy092</author><pubDate>Thu, 30 Oct 2025 22:15:21 +0800</pubDate><description><![CDATA[在我的实际项目中，通过重构异步函数结构，将大型数据的持有时间局限在单个await点内，成功将状态机大小从2KB降至256字节，显著提升了任务切换性能。配合Rust的所有权系统，编译器可以静态验证异步任务间的数据依赖关系，在编译期消除数据竞争的可能性。理解Poll机制和编译器生成的状态机转换，是掌握Rust异步编程本质的关键，这不仅关乎性能优化，更是理解Rust如何在编译期实现内存安全异步的必经之路。内部是一个指向虚表的指针，通过动态分发实现了不同执行器的唤醒策略，但避免了泛型单态化带来的代码膨胀。]]></description><category></category></item></channel></rss>