主要观点:
- Nio 是 Rust 的实验性异步运行时,最初是探索替代调度策略的实验,设计有模块化架构可无缝切换不同调度算法。
- Tokio 使用工作窃取调度器,复杂且需大量簿记,替换其调度器不简单。
- 提出最少加载(LL)调度器,通过将新任务分配给当前工作负载最少的工作线程来解决饥饿问题,当前实现代码简洁且性能有提升。
- 进行基准测试,LL 调度器在多线程环境下表现良好,但 HTTP 基准测试有局限性,高负载下存在竞争导致性能下降,增加连接可减少竞争。
关键信息:
- Nio 相关链接:https://github.com/nurmohamme...
- Tokio 相关链接:https://tokio.rs/
- 最少加载调度器代码示例:在 Scheduler 中通过
least_loaded_worker
方法找到负载最少的工作线程,在schedule
方法中进行任务分配;在 TaskQueue 中通过fetch
方法获取任务并减少队列长度。 - 基准测试结果:不同场景下的时间测试数据,如 spawn_many_local 等各种情况的时间;HTTP 基准测试在不同连接数下的结果及分析。
重要细节:
- 线程基于调度器中每个工作线程有自己的任务队列,平均分配任务效率不高,可能导致工作线程负载不平衡和不必要的开销。
- HTTP 基准测试认为只是简单的“Hello, World”消息响应,不能代表真实世界服务器的情况,但通过增加连接可减少竞争从而改善性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。