想了很久,还是没搞清楚cpu负载与网络延迟之间的关系。
假如有一程序进程的cpu使用率稳定在60%,而它每秒只处理一条指令。那么就是说1s之内,这个进程有600ms是在处理数据的。也就是说,不考虑其他情况,一条来自网络的指令也要600ms之后才能响应。
这样的话,如果某个功能要求响应时间在250ms之内,那么是不是要求cpu使用率一直在25%之下,这也太浪费了。
另一种情况是,现在很多路由器是使用软件转发的,假如一个路由器的cpu使用率在14%,那么网络响应时间应该不小于140ms才对。但是根据ping的结果来看,并不是这样的。
所以,大家说我是不是哪里搞错了。
假如没有网络io操作,600ms纯计算任务的时间,突然来了io中断,那么先中断600ms的任务,保存现场,然后处理中断, 执行io响应的计算及内存复制相关任务,假如这些用50ms,然后os进程调度中断,换到那个600ms计算任务继续执行。而且,很多设备-内存读写,低级网卡操作都是硬件实现在设备单元通过总线直接交互处理的。
宏观来看,相当于650ms计算时间,cpu利用率0.65
微观来看,进程调度算法用简单的时间片来理解,每个可被调度进程假如1ms,就抡着来执行,而不是一个进程一次执行600ms这是不可能的。具体的你需要查阅操作系统的进程调度部分。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。