设计取舍
前面各部分按类型、按平台读,每一页讲清一个机制。这一部分换个角度:把散在各页里的取舍收拢起来,按「选了什么、换来了什么、付出了什么、代价由谁来补」排好。这里不重讲机制,每条都链回讲过它的那一页;数字都来自那些页的实验,出处都是 mio 自己的源码、文档、CHANGELOG、PR 和 issue,补代价的一方多半是 tokio,链到 tokio 卷。
- 取舍汇总:六个决定。只提供就绪加边沿触发(epoll、kqueue 上几乎直通,
poll(2)后备每个连接的系统调用从 11.9 个涨到 22 个);Token原样存进内核、mio 不记任何表(迟到的旧 token 由上层认);不做缓冲、定时器、调度;register要&mut,误用只在 debug 下拦;Events的容量就是一次poll的上限;一个Poll只许一个Waker,这条限制来自 kqueue 和poll(2)的实现,epoll 上其实不需要。
flowchart TB et["就绪加边沿触发"] --> tok["Token 进内核"] tok --> thin["不缓冲、不定时"] thin --> mut["&mut 与 debug 检查"] mut --> cap["Events 定长"] cap --> wk["一个 Waker"]
💬 关联讨论
发起讨论加载中...