<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_41006216的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_41006216</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_41006216]]></copyright><item><title><![CDATA[unique_ptr和shared_ptr的区别以及使用场景选择]]></title><link>https://blog.youkuaiyun.com/qq_41006216/article/details/153820347</link><guid>https://blog.youkuaiyun.com/qq_41006216/article/details/153820347</guid><author>qq_41006216</author><pubDate>Fri, 24 Oct 2025 11:14:29 +0800</pubDate><description><![CDATA[单一所有者：对象有明确的一个所有者性能敏感：需要最小化内存和运行时开销资源管理：管理文件句柄、网络连接等需要明确生命周期的资源组合关系：对象是另一个对象的组成部分特性unique_ptrshared_ptr所有权独占共享复制语义禁止复制，只能移动允许复制性能接近原始指针有引用计数开销内存开销小（通常1个指针）大（通常2个指针+控制块）使用场景单一所有者、明确生命周期共享所有权、不确定生命周期线程安全单个对象不安全，可原子操作引用计数操作原子安全循环引用无此问题。]]></description><category></category></item><item><title><![CDATA[LRU与LFU缓存淘汰算法解析以及适用游戏场景]]></title><link>https://blog.youkuaiyun.com/qq_41006216/article/details/153820150</link><guid>https://blog.youkuaiyun.com/qq_41006216/article/details/153820150</guid><author>qq_41006216</author><pubDate>Fri, 24 Oct 2025 11:11:10 +0800</pubDate><description><![CDATA[特性LRULFU淘汰依据访问时间访问频率核心思想最近被用的，未来更可能被用最常被用的，未来更可能被用优点对时间局部性敏感，实现简单能更好区分长期热点和短期突发缺点容易受扫描类操作影响实现复杂，存在“旧热点”无法淘汰的问题适用场景常规的页面置换、一般应用缓存有明显热点数据且热点相对稳定的场景，如CDN、视频推荐当行为具有“近期相关性”时，用LRU。比如“我刚才在干嘛，我现在很可能继续干嘛”（查看图鉴、观看最近回放、连续开包、连续遇到同一对手）。当行为具有“长期热点”时，用LFU。]]></description><category></category></item><item><title><![CDATA[进程 线程 和协程的区别]]></title><link>https://blog.youkuaiyun.com/qq_41006216/article/details/153820068</link><guid>https://blog.youkuaiyun.com/qq_41006216/article/details/153820068</guid><author>qq_41006216</author><pubDate>Fri, 24 Oct 2025 11:07:41 +0800</pubDate><description><![CDATA[从大到小，从重到轻进程 -> 线程 -> 协程。一个进程可以包含多个线程。一个线程可以包含多个协程。选择策略需要强隔离和稳定性-> 用进程。需要利用多核CPU进行并行计算-> 用多线程（注意同步问题）。需要处理大量I/O操作，追求高并发-> 用协程（通常与一个线程池配合使用，以避免阻塞事件循环）。简单来说，进程提供了容器和边界，线程实现了真正的并行执行，而协程则是在线程之上，为了极致效率而生的“微线程”。]]></description><category></category></item><item><title><![CDATA[Redis单线程模型解析]]></title><link>https://blog.youkuaiyun.com/qq_41006216/article/details/149911732</link><guid>https://blog.youkuaiyun.com/qq_41006216/article/details/149911732</guid><author>qq_41006216</author><pubDate>Mon, 04 Aug 2025 17:57:55 +0800</pubDate><description><![CDATA[Redis 的核心魅力在于其单线程命令处理模型带来的简单性、高效性和天然的原子性。单线程通过避免锁竞争、上下文切换开销，结合内存存储、高效数据结构和非阻塞 I/O 多路复用，实现了极高的吞吐量和低延迟。主要挑战是CPU 密集型操作阻塞和无法利用多核计算。Redis 通过引入后台线程处理特定阻塞任务（惰性删除、AOF刷盘）和Redis 6.0+ 的多线程网络 I/O（处理读/写）来缓解网络 I/O 瓶颈，提升高并发下的性能。对于 CPU 瓶颈，最终解决方案是使用分片（Redis Cluster）]]></description><category></category></item><item><title><![CDATA[Redis惰性删除与UNLINK机制解析]]></title><link>https://blog.youkuaiyun.com/qq_41006216/article/details/149802676</link><guid>https://blog.youkuaiyun.com/qq_41006216/article/details/149802676</guid><author>qq_41006216</author><pubDate>Thu, 31 Jul 2025 12:05:32 +0800</pubDate><description><![CDATA[就像图书馆闭馆时，管理员不是立刻把读者放回原处的每一本书都收走整理，而是先标记“待整理”，等下次有读者需要从那个书架拿书时，管理员才把之前标记的书收走（或者闭馆后管理员再慢慢整理 - 后台线程）。就像读者主动把一大摞书还到前台，管理员不是立刻一本本分类上架（阻塞前台），而是收下书说“知道了”，然后放到旁边的推车里（标记删除），等有空闲的后台工作人员（后台线程）再慢慢处理（异步释放内存）。严格来说，在标记到真正释放的极短间隙内，内存中的数据还在，但客户端请求会被告知键不存在，所以对客户端是透明的。]]></description><category></category></item><item><title><![CDATA[Redis内存数据持久化机制详解]]></title><link>https://blog.youkuaiyun.com/qq_41006216/article/details/149802403</link><guid>https://blog.youkuaiyun.com/qq_41006216/article/details/149802403</guid><author>qq_41006216</author><pubDate>Thu, 31 Jul 2025 12:03:30 +0800</pubDate><description><![CDATA[总结来说，Redis 的内存特性是其高性能的基石，而灵活多样的持久化机制（RDB、AOF、混合模式）则有效地解决了内存数据的持久化问题，让用户可以在性能、数据安全性和恢复速度之间根据需求做出平衡选择。主进程阻塞短，但 fork 一个包含大数据集的子进程可能很耗时（尤其是在物理机上），导致 Redis 短暂停顿（毫秒到秒级）。基本继承了 RDB 和 AOF 的复杂性，但实际管理起来是推荐的平衡方案。生成的 AOF 文件由两部分组成：开头是 RDB 格式的快照数据，后面追加的是 AOF 格式的增量写命令。]]></description><category></category></item></channel></rss>