<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Liu_Lingling的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Liu_Lingling</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Liu_Lingling]]></copyright><item><title><![CDATA[同步和异步（再梳理一次~）]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/153916900</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/153916900</guid><author>Liu_Lingling</author><pubDate>Sun, 26 Oct 2025 11:25:09 +0800</pubDate><description><![CDATA[同步非阻塞虽然在是不阻塞等待的，但对于某个线程而言仍然是需要先执行前一条语句再执行后一条语句，这与阻塞与否无关。协程内是顺序执行的，这是否违反了异步的定义？异步这块讲的还是不太清楚，这个上手试一下会比较好理解。]]></description><category></category></item><item><title><![CDATA[select和epoll 底层原理]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/151687492</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/151687492</guid><author>Liu_Lingling</author><pubDate>Sun, 14 Sep 2025 20:13:49 +0800</pubDate><description><![CDATA[总而言之，epoll相较于select做了两件事，一是通过一个中介让注册(加入所有socket等待队列)操作只需要做一次，二是通过“就绪列表”引用需要的处理事件。，而不用每次epoll_wait都需要遍历三次socket列表。维护“就绪队列”和增加和删除epoll事件时。epoll解决了select的两个缺点。]]></description><category></category></item><item><title><![CDATA[用看守对象管理连接释放]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149420686</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149420686</guid><author>Liu_Lingling</author><pubDate>Thu, 17 Jul 2025 14:16:54 +0800</pubDate><description><![CDATA[如果未使用连接池，则用close关闭，使用连接池则采取连接池的归还连接函数。如果因为在使用连接池的情况下也有手动创造特殊连接的需求，可以通过pool变量是否为真来分别处理，真则归还，假则关闭。把conn连接传入看守对象，对象销毁时自动调用析构函数处理连接。使用连接池就传入pool_共享指针。不使用就传入nullptr。]]></description><category></category></item><item><title><![CDATA[异步的理解2(boost::asio的异步操作和协程)]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149298809</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149298809</guid><author>Liu_Lingling</author><pubDate>Sat, 12 Jul 2025 19:39:32 +0800</pubDate><description><![CDATA[boost::asio通过1.把需要进行异步操作的对象绑定到io_context上，2.io_context会把异步操作注册到操作系统上，3.异步操作完成后操作系统会通知io_context，4.io_context随后调用回调函数。协程上下文yield同理，1.先把异步操作的对象绑定到io_context上，2.io_context把异步操作注册到操作系统上，3.异步操作完成后操作系统通知io_context，4.io_context唤醒协程。]]></description><category></category></item><item><title><![CDATA[boost库的上下文指的是io_context]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149279947</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149279947</guid><author>Liu_Lingling</author><pubDate>Fri, 11 Jul 2025 17:57:48 +0800</pubDate><description><![CDATA[因此使用执行器executor和协程上下文yield时所说的“指定异步函数或者协程中异步函数恢复的上下文”指的是io_context，而不是之前理解的进程切换的上下文。指的是context（中文意思：上下文）没系统学习又吃一亏…]]></description><category></category></item><item><title><![CDATA[异步的定义]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149250875</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149250875</guid><author>Liu_Lingling</author><pubDate>Thu, 10 Jul 2025 15:43:46 +0800</pubDate><description><![CDATA[由于一开始就没很清楚异步的定义，导致在对用协程用“类同步”的形式实现异步时很难理解——这明明就是同步啊，同步不就是任务按特定的顺序执行。结果区别是在是否阻塞等待上。一开始不理解为什么协程可以省略回调函数→为什么异步操作要这么写回调函数，同步都不需要这么麻烦→为什么这是异步这是同步啊？同步指的是一个任务必须等待前一个任务完成后才能继续执行，越看越迷，没系统学习过还是很吃亏的，看到什么不会学什么很容易在基础概念上翻车。我一直以为异步是后续任务不依赖前一个任务，结果区别是在是否是否阻塞等待前一个任务上吗？]]></description><category></category></item><item><title><![CDATA[reactor和proactor的回调逻辑区别]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149236050</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149236050</guid><author>Liu_Lingling</author><pubDate>Wed, 09 Jul 2025 23:56:01 +0800</pubDate><description><![CDATA[区别是一个提醒可读，我绑定一个回调函数去帮我完成这个读的过程及读完后的操作，一个是读完了，我绑定一个回调去进行读完后的操作。认真写博客耗费时间~还是直接贴图好了，省事。epoll需要read/write。]]></description><category></category></item><item><title><![CDATA[我还以为B/S比C/S难很多]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149158125</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149158125</guid><author>Liu_Lingling</author><pubDate>Sun, 06 Jul 2025 20:45:40 +0800</pubDate><description><![CDATA[原来都是通过ip+端口建立连接，然后B/S就比C/S多处理一个HTTP协议。然后用WebSocket和Json序列化实现实时通讯，我还以为会麻烦很多。加油吧，剩下就是花时间搭框架然后逐步往上添东西了。]]></description><category></category></item><item><title><![CDATA[突然悟了“事件驱动和回调函数的优势是什么了”]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149145137</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149145137</guid><author>Liu_Lingling</author><pubDate>Sun, 06 Jul 2025 01:35:15 +0800</pubDate><description><![CDATA[函数就是某个事件发生时对应要执行的处理（调用函数不需要条件，但我们写代码肯定不能乱调，得在适当的时候调，这个适当就对应某个条件满足/事件发生。比如：事件：饭点到了处理：吃饭如果要写个一天要做的事情的程序，那就是if(早上七点)起床else if（早上八点）学习else if（饭点到了）吃饭else if...在知道一天要做的事情顺序的话，这些if还可以省略，只要按照“起床，学习，吃饭”的顺序写代码调用函数就行，那如果不能确认呢？if（饭点到了）吃饭else if(朋友找你打游戏)]]></description><category></category></item><item><title><![CDATA[（大三）分享下自己阅读开源项目的方法]]></title><link>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149057653</link><guid>https://blog.youkuaiyun.com/Liu_Lingling/article/details/149057653</guid><author>Liu_Lingling</author><pubDate>Wed, 02 Jul 2025 00:45:59 +0800</pubDate><description><![CDATA[无项目经验如何弄懂开源项目]]></description><category></category></item></channel></rss>