宣布 Nio

主要观点:

  • 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”消息响应,不能代表真实世界服务器的情况,但通过增加连接可减少竞争从而改善性能。
阅读 9
0 条评论