gpt4 book ai didi

c++ - "high involuntary context"开关是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 22:21:28 26 4
gpt4 key购买 nike

我用 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

我看到我重写的代码中有很多非自愿上下文切换

我的问题不是关于如何减少上下文切换。但是..

  1. 当“非自愿上下文切换”更多时会发生什么?
  2. 会对系统产生什么影响?

P.S:磁盘上没有任何事件,因为没有写入任何内容。它只是多次ping服务器。

更新:

添加了系统和用户时间。

程序是多线程的。在这两种情况下都会产生相同数量的线程(3k 线程)。只有 C 中的底层 api 被重写。

最佳答案

只要线程/进程进行阻塞的系统调用,就会发生自愿上下文切换。

当线程运行时间过长(通常是 10 毫秒)而没有进行阻塞的系统调用并且有进程在等待 CPU 时,会发生非自愿的上下文切换。

看起来您的程序现在比以前更占用 CPU。如果您将其设为多线程,则可能会增加。

821 上下文切换 - 取决于程序的执行时间,这可能会也可能不会很多。

如果您想减少上下文切换的数量,您可以减少工作线程的数量,这样线程的数量就会少于 CPU 内核的数量。

更新

假设两种情况下的负载相同,看起来代码修改增加了 cpu 使用率。如果增加的负载是一个问题,您应该分析代码以找到瓶颈。 Instrumentation有助于找出导致问题的代码部分。

关于c++ - "high involuntary context"开关是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com