Reactor 的问题:读取数据的操作是同步的——调用 read() 后线程阻塞等待数据从内核拷贝到用户缓冲区。
Proactor / io_uring:你告诉内核"数据读到我指定的缓冲区",内核完成后通知你。读数据不阻塞。
Reactor(epoll):
程序:epoll_wait 告诉我可读了
程序:read(fd, buf, len) ← 这里阻塞等数据拷贝
程序:处理数据
Proactor(io_uring):
程序:提交 SQE → "把数据读到 buf,完成后通知我"
程序:干别的事情
内核:数据准备好 → DMA 直接拷贝到 buf
内核:产生 CQE → 通知程序
程序:从 CQE 拿到完成的 buf
程序:处理数据
你的 SimpleAsyncLogger 的 Linux 后端 (io_engine_linux.cpp) 用的就是 Proactor 模式——提交 WRITE_FIXED 后不等待,CQE 完成后处理。