文章
这里收录了我发布的全部文章。
-
tokio(三):I/O、定时器、同步原语与 select!
tokio 的 I/O 驱动将 mio 的 Poll 包装为与调度器集成的 Reactor,通过 Waker 机制在 fd 就绪时唤醒对应 task。定时器使用六级分层时间轮(每级 64 slot),所有操作 O(1)。同步原语(Mutex / channel / Semaphore)专为 async 设计,核心区别是等待时不阻塞线程。select! 宏是 tokio 最强大也最危险的组合器,理解其取消语义是正确使用的前提。
-
tokio(二):任务系统-spawn、取消与协作式调度
tokio::spawn 将一个 Future 包装为运行时调度的任务(task),任务是非抢占式的——它只在 .await 点主动让出执行权。tokio 通过 coop budget(128 次操作预算)实现软抢占,通过 JoinSet / TaskTracker 提供结构化并发,通过 drop JoinHandle 实现取消。理解任务生命周期是避免 tokio 大部分 pitfall 的关键。
-
tokio(一):运行时-从 mio 到异步运行时的完整设计
tokio 是 Rust 的异步运行时,提供工作窃取调度器、I/O 驱动、定时器、同步原语和任务管理。它在 Rust 异步生态中的角色等同于 Asio 的 iocontext + strand + timerqueue + 线程池的总和,但 Rust 选择了分层架构(mio → Future trait → tokio)而非 Asio 的单库大一统模式。理解 tokio 需要先理解它为什么不能只用 mio,以及 Rust async/await 的设计如何塑造了运行时的形态。
-
DDD(二):领域事件
领域事件是系统里已经发生的一个事实,用过去时描述。它的本质作用是解耦聚合之间的协作。