在Boost生态系统中,多个项目蓬勃发展。我在西班牙的C++大会上演讲,分享了编写高效异步Asio代码的经验。Boost 1.86引入C++20协程,显著提升性能。同时,我更新了Boost.MySQL,增加新特性并增强安全性,未来计划提交Postgres库。
尽管C++20的协程表现最佳,但并非总是可用。可以选择回调或有栈协程。asio库支持多种协程模式,但存在局限性。uasync库提供基于ucontext的超简协程,展示了proactor与有栈协程的结合。代码可读性对比显示有栈与无栈协程在使用上几乎无差异。
序 什么叫扩展asio? Beast给Asio增加了 HTTP 协议,不叫扩展asio。那什么叫扩展asio? 举个例子,给 asio 的 socket 对象,基于io_uring提供的 IORING_OP_SHUTDOWN 增加 async_shutdown()...
最近在写以太坊的巧克力浏览器(区块链浏览器)。因为区块链浏览器需要访问历史的块,因此需要节点以 archive 模式同步。 遂运行了一个 geth。 然而半个月过去了,才同步了四百万高度,而且这四百万高度的最后一百万花了80%的时间。 同步速度以肉眼可见的速度下降,ETA 变的越来越长。 从一个月慢慢的增长到6个月。 于是寻找更快的客户端。找到了 erigon。erigon 号称2天完成...
这是上篇 那些年我们追过的网络库(PartI) 的后续, ASIO 腾空出世 在地球最大的岛上,另一位少年开始拜读 ACE 的大作。那时候,没有 libuv 没有 libev 更没有 libevent . 有的只是 ACE. 然而这个南方小国的少年没有跟风陷入 ACE 崇拜,他以敏锐的目光察觉到了 ACE 的弊病。 ACE 哪里做的不好?又哪里是值得借鉴的? 少年在给 c++...
前段时间看了 ASIO 爸爸关于ASIO的一个演讲. ASIO 爸爸说, ASIO 的设计理念就是作为一个 toolkit 而不是一个框架. ASIO并不强迫你使用某种编程模型. 它只是提供一系列的函数和类帮你更容易的编程. ASIO 的设计思想其实和 GLIB 的 g_main_loop 非常像. 但是 C++ 因为有模板, 所以能更好的实现. 使用 g_main_loop 的时候,...
avbot 是一个纯粹的单线程程序。在设计 avbot 最初的时候,我就给自己下了一个明确的目标:必须单线程。 但是,它的逻辑可不简单。它需要处理 XMPP 协议,处理 IRC 协议,处理 WebQQ 协议,处理pop3协议,处理 SMTP 协议。 所有的处理都必须异步。绝对不能因为 IO 阻塞。 可能很多人会不以为然,这有什么, select()...
完成下面两步后,将自动完成登录并继续当前操作。