< 返回版块

LongRiver 发表于 2023-09-09 15:11

Tags:tokio

我基于tokio写了个最简单的echo服务。每收到请求就spawn一个task。支持长连接。

然后又写了个客户端程序,可以指定起N个task同时请求上面的echo服务。每个task建立一个长连接,然后顺序执行若干个请求。

我想用这个客户端把echo服务的cpu压满,但是一直压不满。

我是M1版的Mac笔记本。echo服务自动起了8个线程。

当客户端程序启动1~8个task时,基本上echo服务整个进程的总cpu的压力也是线性增加的。但是超过8个task后,echo服务和客户端这两个程序的cpu都分别都是 170% 左右了。此时整个机器的CPU占用是在50%左右。再增加task,并不会让echo服务的cpu变得更高。

我本来以为这种程序是可以把整个机器的CPU占满的。我之前用C语言的epoll写的网络程序就可以占满机器的整个CPU(不过是在Linux上测试的)。

请问下,CPU不能打满,是因为tokio这种机制的原因吗?

如果需要的话,我可以贴下两个程序的代码。

评论区

写评论
tokyohuang123 2023-10-17 15:51

tokio的任务是kb c是mb啊 当然大不满

viruscamp 2023-09-14 09:50

占满CPU之前先把 IO占满了?

你最好记录以下吞吐量,在同一台机器上,同一个客户端, 记录 客户端开1个task, 吞吐量,客户端CPU占用,服务端CPU占用。
客户端开2个task, 3个,一直到8个, 10个,再记录相同数据。

最后用同一台机器上,同一个客户端,跑你的C语言的epoll写的网络程序服务端,按上面的流程跑一遍,记录好。

Bai-Jinlin 2023-09-13 11:02

看看代码,你这什么都没有让大伙怎么复现你的问题?

DDD 2023-09-12 11:54

基于C语言写的程序是否是每次来一个任务就启动一个系统线程呢?

hangj 2023-09-11 16:12

因为你并没有在 task 里面做 CPU 密集型运算

作者 LongRiver 2023-09-09 20:55

好的。多谢。

--
👇
苦瓜小仔: 最好去 tokio 仓库问,带上代码。 https://github.com/tokio-rs/tokio/issues

1 共 7 条评论, 1 页