作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个系统会执行大量阻塞网络调用。基于此,CPU 空闲时间以及整体系统负载相对较高。当我向系统添加更多 CPU 时,空闲时间保持不变,但系统负载下降。为什么会这样?
下面是幕后发生的事情吗?
当调度一个想要阻塞网络 I/O 的进程时,CPU 准备并传播对 I/O 总线的调用,设置中断处理程序,然后切换到另一个进程,因为没有其他事情要做完毕。当 I/O 调用返回时,I/O 子系统引发中断,CPU 返回到原始进程以完成其执行。
因此,CPU 的工作包括与 I/O 子系统的接口(interface)和上下文切换。当有许多进程需要执行此操作时,由于等待其 I/O 和上下文切换的进程,负载会增加。当我向系统添加更多 CPU 时,每个 CPU 的上下文切换更少,因此等待和负载更少。
这是正确的解释吗?如果是,等待其网络 I/O 完成的进程处于哪种状态?这应该是可运行的,以影响系统负载。
最佳答案
一切顺利。平均负载是等待 CPU 时间的进程数; CPU 越多,进程越多地分布在 CPU 上,因此队列的长度越短。这就像收银员的数量如何影响想要结账的顾客队伍一样。
关于linux - Linux 如何处理阻塞 I/O 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212183/
我是一名优秀的程序员,十分优秀!