我基于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这种机制的原因吗?
如果需要的话,我可以贴下两个程序的代码。
1
共 7 条评论, 1 页
评论区
写评论tokio的任务是kb c是mb啊 当然大不满
占满CPU之前先把 IO占满了?
你最好记录以下吞吐量,在同一台机器上,同一个客户端, 记录 客户端开1个task, 吞吐量,客户端CPU占用,服务端CPU占用。
客户端开2个task, 3个,一直到8个, 10个,再记录相同数据。
最后用同一台机器上,同一个客户端,跑你的C语言的epoll写的网络程序服务端,按上面的流程跑一遍,记录好。
看看代码,你这什么都没有让大伙怎么复现你的问题?
基于C语言写的程序是否是每次来一个任务就启动一个系统线程呢?
因为你并没有在 task 里面做 CPU 密集型运算
好的。多谢。
--
👇
苦瓜小仔: 最好去 tokio 仓库问,带上代码。 https://github.com/tokio-rs/tokio/issues
最好去 tokio 仓库问,带上代码。 https://github.com/tokio-rs/tokio/issues