【问题标题】:Why do two identical processes don't take the double CPU load为什么两个相同的进程不承担双​​倍的 CPU 负载
【发布时间】:2017-11-18 15:37:22
【问题描述】:

我使用的是 Raspberry Pi 3,基本上踩过一条小绊线。

我有一个非常庞大而复杂的程序,它占用了大量内存并且 CPU 负载很大。我认为如果我在第一个进程仍在运行时启动相同的进程是正常的,它将占用相同数量的内存并且尤其是双倍的 CPU 负载。我发现它不会占用更多内存,也不会影响 CPU 负载。

为了查明这种行为是否来自我的程序,我编写了一个内存使用率极高的小型 c++ 程序,如下所示:

#include <iostream>

using namespace std;

int main()
{
    for(int i = 0; i<100; i++) {

        float a[100][100][100];
        for (int i2 = 0; i2 < 99; ++i2) {
            for (int i3 = 0; i3 < 99; ++i3){
                for (int i4 = 0; i4 < 99; ++i4){
                    a[i2][i3][i4] = i2*i3*i4;
                    cout << a[i2][i3][i4] << endl;
                }
            }
        }
    }
    return 0;
}

CPU 负载大约是最大级别的 30%,我在一个终端中启动了代码。奇怪的是,当我在另一个终端同时启动它时,它并没有影响 CPU 负载。我得出结论,这种行为不可能来自我的程序。

现在我想知道:

  • 是否有一个“锁”可以确保某种类型的进程不会烧毁您的核心?

  • 为什么两个相同的进程不会使 CPU 负载加倍?

【问题讨论】:

    标签: process


    【解决方案1】:

    好吧,我发现存在一个“锁”,它可以确保进程不会占用所有内存并使 CPU 负载上升到 100%。似乎有更多的进程,而不是更多的 CPU 负载,但不是以线性方式。

    另外,我写的寻找行为的代码只有高内存使用,30%的水平来自标准库中的cout。多个进程可以同时使用该命令,不会增加CPU负载,但会影响打印速度。

    当我发现这一点时,我对程序的速度产生了怀疑。我在我的 IDE for c++ 中使用了分析来找出我的原始程序的持续时间,实际上它慢了两倍。

    这似乎是我一直在寻找的解决方案,但我认为这并不真正适用于大量受众,因为 Raspberry Pi 的结构非常特殊。我不知道这对其他系统是如何工作的。

    顺便说一句:我本可以猜到有一把锁。我的意思是,如果你启动 10 个进程来占用 CPU 最大负载水平的 15%,那么你将有 150% 的 CPU 使用率。不可能!

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多