作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我用 C 语言重新编写了一部分代码。在使用 getrusage(2) 记录资源使用情况进行测试时C API。
更改代码之前:
user time (ms): 21503
system time (ms): 372
involuntary context switches: 20
更改后:
user time (ms): 25589
system time (ms): 80732
involuntary context switches: 821
我看到我重写的代码中有很多非自愿上下文切换
。
我的问题不是关于如何减少上下文切换。但是..
P.S:磁盘上没有任何事件,因为没有写入任何内容。它只是多次ping服务器。
更新:
添加了系统和用户时间。
程序是多线程的。在这两种情况下都会产生相同数量的线程(3k 线程)。只有 C 中的底层 api 被重写。
最佳答案
只要线程/进程进行阻塞的系统调用,就会发生自愿上下文切换。
当线程运行时间过长(通常是 10 毫秒)而没有进行阻塞的系统调用并且有进程在等待 CPU 时,会发生非自愿的上下文切换。
看起来您的程序现在比以前更占用 CPU。如果您将其设为多线程,则可能会增加。
821 上下文切换 - 取决于程序的执行时间,这可能会也可能不会很多。
如果您想减少上下文切换的数量,您可以减少工作线程的数量,这样线程的数量就会少于 CPU 内核的数量。
更新
假设两种情况下的负载相同,看起来代码修改增加了 cpu 使用率。如果增加的负载是一个问题,您应该分析代码以找到瓶颈。 Instrumentation有助于找出导致问题的代码部分。
关于c++ - "high involuntary context"开关是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777430/
我用 C 语言重新编写了一部分代码。在使用 getrusage(2) 记录资源使用情况进行测试时C API。 更改代码之前: user time (ms): 21503 system time (ms
我是一名优秀的程序员,十分优秀!