#worker-thread #run-time #media-server #sans-io #task #controller #control

sans-io-runtime

适用于SDN和媒体服务器的有观点SANS-IO运行时

3个不稳定版本

新版本 0.2.1 2024年8月23日
0.2.0 2024年7月22日
0.1.0 2024年7月18日

666网络编程 中排名

Download history 71/week @ 2024-07-12 732/week @ 2024-07-19 396/week @ 2024-07-26 299/week @ 2024-08-02 162/week @ 2024-08-09 360/week @ 2024-08-16

1,249 每月下载次数
用于 3 个crate(2直接使用)

MIT 许可证

180KB
3.5K SLoC

Rust 3K SLoC // 0.0% comments JavaScript 602 SLoC // 0.3% comments

License: MIT Discord

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,因为我们基于轮询,可能通过使用中断来提高。

设计

Design

单任务

以下是单个任务的状态图。

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