初略测试,仅供参考
client和server在同一台机器(2.2 GHz 六核Intel Core i7/ssd硬盘/16g内存 )
test 1
读写分离(启动两个task/goroutine,一个读一个写),客户端生成文件,客户端从文件中读取数据写入到服务端
在服务端计算速率(收到的bytes/second)
文件20g 每次发送数据4k
| Type | Rate |
|---|---|
| go Tcp | 574m/s |
| rust Tcp / async_std | 130m/s |
| rust Tcp / tokio | 174m/s |
文件20g 每次发送数据40k
| Type | Rate |
|---|---|
| go Tcp | 1775m/s |
| rust Tcp / async_std | 673m/s |
| rust Tcp / tokio | 542m/s |
test 2
读写分离(启动两个task/goroutine) ,客户端不生成文件,客户端直接发送数据到服务端
每次发送的包大小为4k/go buffer为默认4k/ rust buffer为默认8k
| Type | Rate |
|---|---|
| go Tcp | 560~603m/s |
| go Tcp / bufio | 500m/s |
| rust Tcp / async_std | 1000 m/s |
| rust Tcp / async_std / BufWriter,BufReader | 1280m/s |
| rust Tcp / tokio | 900m/s |
| rust Tcp / tokio / BufWriter,BufReader | 1150m/s |
每次发送的包大小为40k/go buffer为默认4k/ rust buffer为默认8k
| Type | Rate |
|---|---|
| go Tcp | 1192m/s |
| go Tcp / bufio | 1500m/s |
| rust Tcp / async_std | 1444m/s |
| rust Tcp / async_std/ BufWriter,BufReader | 1500m/s |
| rust Tcp / tokio | 934m/s |
| rust Tcp / tokio / BufWriter,BufReader | 1180m/s |
test 3
读写不分离(不启动task/goroutine) ,客户端不生成文件,客户端直接发送数据到服务端
每次发送的包大小为4k/go buffer为默认4k/ rust buffer为默认8k
| Type | Rate |
|---|---|
| go Tcp | 190m/s |
| go Tcp /bufio | 220m/s |
| rust Tcp / async_std | 100m/s |
| rust Tcp / async_std / BufWriter,BufReader | 110m/s |
| rust Tcp / tokio | 129m/s |
| rust Tcp / tokio / BufWriter,BufReader | 143m/s |
每次发送的包大小为40k/go buffer为默认4k/ rust buffer为默认8k
| Type | Rate |
|---|---|
| go Tcp | 2250m/s |
| go Tcp / bufio | 2250m/s |
| rust Tcp / async_std | 676m/s |
| rust Tcp / async_std / BufWriter,BufReader | 780m/s |
| rust Tcp / tokio | 733m/s |
| rust Tcp / tokio / BufWriter,BufReader | 820m/s |

本文通过三个不同的测试场景,对比了使用Go和Rust语言编写的TCP客户端和服务端在不同配置下的吞吐量表现,包括读写分离与非分离的情况。
4万+

被折叠的 条评论
为什么被折叠?



