3个不稳定版本
新版本 0.2.1 | 2024年8月23日 |
---|---|
0.2.0 | 2024年7月22日 |
0.1.0 | 2024年7月18日 |
666 在 网络编程 中排名
1,249 每月下载次数
用于 3 个crate(2直接使用)
180KB
3.5K SLoC
SANS-I/O运行时(开发中)
(此模块处于非常早期的开发阶段。它尚未准备好用于生产使用。)
这是一个简单、轻量级且快速的SansIo机制运行时。
目标
此项目的目标是提供一个简单、轻量级且快速的SansIo机制运行时。运行时应该能够在任何具有变量网络库的平台(如:mio、io_uring、af_xdp)上运行。
工作原理
控制器将创建一些线程,每个线程将运行一个工作线程。工作线程
功能
实现 | C/I | 工作 | 基准测试 | 组 | 描述 |
---|---|---|---|---|---|
[x] | [ ] | [x] | [ ] | 控制 | 跨任务通信 |
[x] | [ ] | [x] | [x] | 控制 | 控制器与工作线程之间的通信 |
[x] | [ ] | [x] | [ ] | 控制 | 控制器与任务之间的通信 |
[x] | [ ] | [x] | [ ] | 控制 | 工作线程状态监控 |
[x] | [ ] | [x] | [ ] | I/O | Udp |
[x] | [ ] | [x] | [ ] | I/O | Tun/Tap |
[ ] | [ ] | [ ] | [ ] | I/O | Tcp |
[ ] | [ ] | [ ] | [ ] | I/O | Rpc |
[x] | [ ] | [x] | [ ] | 后端 | mio |
[x] | [ ] | [x] | [ ] | 后端 | 原始轮询 |
[x] | [ ] | [x] | [ ] | 后端 | 轮询 |
[ ] | [ ] | [ ] | [ ] | 后端 | io_uring |
[ ] | [ ] | [ ] | [ ] | 后端 | af_xdp |
[x] | [ ] | [x] | [ ] | 示例 | Udp回声服务器 |
[x] | [ ] | [x] | [ ] | 示例 | Udp回声客户端 |
[x] | [ ] | [x] | [ ] | 示例 | 简单的Whip/Whep服务器 |
基准测试
- 外部通信可以达到每秒1.5M条消息(1500字节),即1.5M * 1500 * 8 = 18Gbps,这对于大多数应用来说已经足够了。延迟为2.5ms,因为我们基于轮询,可能通过使用中断来提高。
设计
单任务
以下是单个任务的状态图。
stateDiagram
[*] --> Created
Created --> Waiting : attach to worker
Waiting --> OnTick : timer fired
OnTick --> Waiting : no output
OnTick --> PopOutput : has output
PopOutput --> PopOutput : has output
PopOutput --> Waiting : no output
Waiting --> OnInput : I/O, Bus
OnInput --> Waiting : no output
OnInput --> PopOutput : has output
思路是模仿SAN/IO风格,每个任务将在创建输出后立即减少内存。在我们能够接收下一个输入之前,我们需要弹出输出。
多任务
由于SAN/IO的思路,我们需要在接收下一个输入之前弹出输出。当我们有多个任务时,这是一个问题。我们需要有一种方法来控制任务的顺序。
stateDiagram
[*] --> Created
Created --> Waiting : attach groups to worker
Waiting --> OnTick : timer fired
OnTick --> OnTickSingleTask : next task
OnTick --> Waiting : no task
OnTickSingleTask --> OnTick : no output
OnTickSingleTask --> PopCurrentTickTaskOutput : has output
PopCurrentTickTaskOutput --> PopCurrentTickTaskOutput : has output
PopCurrentTickTaskOutput --> OnTick : no output
Waiting --> OnInput : I/O, Bus
OnInput --> OnInputSingleTask : has task
OnInputSingleTask --> Waiting : no output
OnInputSingleTask --> PopCurrentInputTaskOutput : has output
PopCurrentInputTaskOutput --> PopCurrentInputTaskOutput : has output
PopCurrentInputTaskOutput --> Waiting : no output
依赖关系
~2–30MB
~455K SLoC