标签: cpp
与该标签相关的所有文章 "cpp".
-
asio(四):异步模型演进-从回调到C++20协程
Asio 的异步操作只写一次实现,通过 asyncresult<CompletionToken, Signature> trait 自动适配回调、stackful 协程、stackless 协程、C++20 协程和 future。这是 Asio 最精妙的设计——一个 asyncread 实现同时支持五种异步风格,新增风格只需特化一个 trait。
-
asio(三):组件拆分-strand、timer、socket、buffer如何协作
Asio 的组件设计遵循一个原则:I/O 对象不拥有资源(缓冲区、线程),只持有操作系统句柄和执行器引用。strand 解决多线程序列化问题,timer 集成进 reactor 的等待超时,socket 分层抽象协议差异,buffer 是纯粹的指针+长度对。这些组件通过共享同一个 io_context 和执行器模型自然组合。
-
asio(二):io_context-事件循环的核心引擎
iocontext 不只是一个事件循环,它是异步操作的调度器:管理完成事件队列、分发 handler 到调用 run() 的线程、与操作系统的 I/O 多路复用器集成。Boost 1.66 将 ioservice 拆分为 io_context(执行上下文)+ executor(轻量句柄),是为了解耦 I/O 对象与具体的执行环境。
-
asio(一):Proactor模式-为什么Asio不用Reactor
Proactor 模式以「操作完成通知」为核心,恰好是 Windows IOCP 的原生语义;而 Linux epoll/macOS kqueue 是 Reactor(就绪通知),可以在其上模拟 Proactor。反过来在 IOCP 上模拟 Reactor 极其别扭。Asio 选 Proactor 作为公共 API,是唯一能同时高效映射所有主流操作系统的选择。